#python #web-scraping #beautifulsoup
#python #веб-очистка #beautifulsoup
Вопрос:
Я пытаюсь создать webscraper для венгерского сайта электронной коммерции под названием https://www.arukereso.hu .
from bs4 import BeautifulSoup as soup
import requests
#The starting values
#url = input("Illeszd ide egy Árukeresős keresésnek a linkjét: ")
url = 'https://www.arukereso.hu/notebook-c3100/'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'}
page_num = 1
allproducts = []
#Defining functions for better readability
def nextpage():
further_pages = usefulsoup.find("div", class_="pagination hidden-xs")
nextpage_num = page_num 1
try:
next_page = further_pages.find("a", string=str(nextpage_num))
next_page = next_page['href']
return next_page
except:
return None
while True:
if url == None:
break
r = requests.get(url, headers=headers)
page_html = r.content
r.close()
soup = soup(page_html, "html.parser")
#print(soup)
usefulsoup = soup.find("div", id="product-list")
#print(usefulsoup)
products = usefulsoup.find_all("div", class_="product-box-container clearfix")
print(products)
for product in products:
allproducts.append(product)
url = nextpage()
print(allproducts)
Проблема в том, что при первом nextpage()
вызове функции она возвращает допустимую ссылку (https://www.arukereso.hu/notebook-c3100/?start=25 ), содержимое запроса также является допустимым html, но BeautifulSoup создает из него пустой список, поэтому программа завершается с ошибкой.
Я был бы признателен, если бы кто-нибудь мог объяснить причину этого и как это исправить.
Ответ №1:
Проблема в вашем коде заключается в следующей строке:
soup = soup(page_html, "html.parser")
При первом запуске цикла он работает, потому soup
что имя еще не перезаписано. При следующем запуске метод soup из package перезаписывается, и именно поэтому у вас проблема. Переименуйте эту переменную, и она должна работать. Я его протестировал.
Ответ №2:
Я не уверен, почему это происходит, но scrapy может быть хорошим решением для решения такого рода проблем https://scrapy.org /