[英]Scraping a paginated website: Scraping page 2 gives back page 1 results
我正在使用python中的請求庫的get方法來從組織成頁面的網站(即,在底部用數字分頁)中抓取信息。
頁面1鏈接: https : //realfood.tesco.com/search.html?DietaryOption=Vegetarian
我能夠從第一頁中提取所需的數據,但是當我向代碼提供第二頁的URL時,也會從第一頁獲得相同的數據。 現在,在仔細分析我的代碼之后,我確定問題不是我的代碼邏輯,而是第二頁url的結構方式。
所以我的問題是如何使我的代碼按我的意願工作。 我懷疑這是參數問題,但我不確定100%。 如果確實是我需要傳遞給請求的參數,我將對如何分解參數提供一些指導。 我的第2頁鏈接附在下面。 謝謝。
第2頁鏈接: https ://realfood.tesco.com/search.html?DietaryOption = Vegetarian#!q = 'selectedobjecttype%3DRECIPES%26page%3D2%26perpage%3D30%26DietaryOption%3DVegetarian'
注意:這些頁面本身並不是真正的鏈接。
看起來平台是ASP.NET,分頁鏈接由JS操作。 我非常懷疑您使用python會容易,因為beautifulsoup是HTML解析器/提取器,因此,如果您真的想使用此網站,我建議您研究Selenium或PhantomJS,因為它們完全復制了瀏覽器。
但是在這種特殊情況下,您很幸運,因為有一個舊版網站版本沒有使用現代功能:)
http://legacy.realfood.tesco.com/recipes/search.html?st=vegetarian&cr=False&page=3&srt=search相關性
該網站的分頁似乎由您發布的第二個URL中傳遞的查詢參數處理,即:
https://realfood.tesco.com/search.html?DietaryOption=Vegetarian#!q='selectedobjecttype%3DRECIPES%26page%3D2%26perpage%3D30%26DietaryOption%3DVegetarian'
查詢字符串是url編碼的。 %3D是=,%26是&。 這樣可能更易讀:
q='selectedobjecttype=RECIPES&page=2&perpage=30&DietaryOption=Vegetarian'
例如,如果您想退回素食食譜的第五頁,URL將如下所示:
您可以不斷增加頁碼,直到得到沒有結果的頁面,如下所示 。
那這個呢?
from bs4 import BeautifulSoup
import urllib.request
for numb in ('1', '10'):
resp = urllib.request.urlopen("https://realfood.tesco.com/search.html?DietaryOption=Vegetarian")
soup = BeautifulSoup(resp, from_encoding=resp.info().get_param('charset'))
for link in soup.find_all('a', href=True):
print(link['href'])
希望它對您有用。 我無法測試它,因為我的辦公室擋住了這類事情。 今晚回家時我會嘗試一下,看看它是否能完成應做的工作...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.