Dunaevlad
@Dunaevlad

Почему парсинг на Golang тратит больше времени для выполнения работы, чем парсинг на Python?

Для париснга на Golang использую GoColly:
func main() {
	c := colly.NewCollector()
	start := time.Now()

	// Find and visit all links
	c.OnHTML("div.category-container", func(e *colly.HTMLElement) {
		// e.Request.Visit(e.Attr("href"))

		e.ForEach("div.category-label-block a.category-label-link", func(_ int, tournament *colly.HTMLElement) {
			tournament.Request.Visit(tournament.Attr("href"))

			e.ForEach("div.command div.member-name.nowrap a.member-link", func(i int, name *colly.HTMLElement) {
				name.Request.Visit(name.Attr("href"))
			})

		})

	})

	// c.OnRequest(func(r *colly.Request) {
	// 	fmt.Println("Visiting", r.URL)
	// })

	c.Visit("https://www.marathonbet.ru/su/popular/Tennis")
	finish := time.Since(start)
	fmt.Println(finish)  // 43 секунды
}


Python:

import time

import requests
from bs4 import BeautifulSoup

start = time.time()
url = 'https://www.marathonbet.ru/su/popular/Tennis?cpcids=402555'
# get body response
response = requests.get(url).text
soup = BeautifulSoup(response, 'lxml')
for i in soup.find_all('div', 'category-container'):
    print(i.find('a', 'category-label-link').get('href'))
    for k in soup.find_all('div','bg coupon-row'):
        print(k.find('a', 'member-link').get('href'))
finish = time.time()
print(finish - start)  # 2 сек.


Такого ведь не может быть, я скомпилировал код на Golang.
  • Вопрос задан
  • 510 просмотров
Решения вопроса 2
@kirillinyakin
Судя по коду на голанге вы посещаете каждую страницу, а на питоне вы просто получаете атрибут href
Ответ написан
@deliro
1. Без профилирования результаты можешь выбросить
2. lxml - это си а не питон и вполне может быть быстрее го
3. Парсить страницу 43 секунды - неадекватно. Так что возвращаемся к пункту #1
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы