Я довольно новичок в python и beautifulsoup, я написал этот фрагмент кода (прилагается только соответствующая часть). Однако он очень медленный во время выполнения, он занимает около 8 секунд (мне нужно зацикливать его несколько тысяч раз).Ускорение кода (beautifulsoup, python)
Не могли бы вы дать мне какие-либо указания, как сделать это быстрее? Каждая критика приветствуется.
PS. Это может быть актуально: на каждой странице имеется 20 строк, столбцы 0..5 - короткие строки до 100 символов, - 6-й столбец больше, это строка длиной до 2000 символов, request.get (.. .) занимает около 0,2 сек
ReqHTMLContent = bs4.BeautifulSoup(ReqResult.text)
###############################################
#print('Adding report ...', flush=True)
for TableRow in ReqHTMLContent.select('table#msgTable tr'):
#print (TableRow)
RpName = TableRow.find_all('td')[0].get_text(strip=True)
RpArray[row][0] = RpName
#print(RpName)
RpCategory = TableRow.find_all('td')[1].get_text(strip=True)
RpArray[row][1] = RpCategory
#print(RpCategory)
RpType = TableRow.find_all('td')[2].get_text(strip=True)
RpArray[row][2] = RpType
#print(RpType)
RpTime = TableRow.find_all('td')[3].get_text(strip=True)
RpArray[row][3] = RpTime
#print(RpTime)
RpTitle = TableRow.find_all('td')[4].get_text(strip=True)
RpArray[row][4] = RpTitle
#print(RpTitle)
#linki i tresc raportu
for link in TableRow.find_all("a", attrs={"class": "evLK"}):
RpLink = domain_url + link.get('href')
RpArray[row][5] = RpLink
#print(RpLink)
#tresc raportu
RpHtml = requests.get(RpLink)
RpRaw = bs4.BeautifulSoup(RpHtml.text)
#<div id="ctl00_Body_msgDetails1_eventReport" class="ItemA">
RpTable = RpRaw.find("div", attrs={"id": "ctl00_Body_msgDetails1_eventReport", "class": "ItemA"})
RpText = RpTable.get_text("|", strip=True)
RpArray[row][6]=RpText
#print(RpText)
row += 1
### for TableRow in ReqHTMLContent.select('table#msgTable tr'):
###############################################
Если этот код работает, только медленно, то вы могли бы быть лучше вы спрашиваете об этом на codereview.stackexchange.com – Blair
Вы вызываете 'TableRow.find_all ('td')' для каждого столбца. На каждый суп по вызову будет найден «td». Поэтому поместите 'TableRow.find_all ('td')' в переменную и повторно используемую переменную, чтобы получить значения каждого столбца. – Netro
Реальная проблема заключается в 'request.get()' для каждой ссылки каждой строки. – Jivan