【发布时间】:2019-11-21 14:48:34
【问题描述】:
我在 python 中创建了一个脚本来获取来自 bing 的搜索结果的前 400 个链接。不确定是否总是至少有 400 个结果。在这种情况下,结果数约为 300。它的目标网页中有 10 个结果。但是,可以在遍历下一页时找到其余结果。问题是当那里没有更多的下一页链接时,网页会一遍又一遍地显示最后的结果。
搜索关键字是michael jackson,这是一个成熟的link
当没有更多新结果或结果小于 400 时,如何摆脱循环?`
我试过了:
import time
import requests
from bs4 import BeautifulSoup
link = "https://www.bing.com/search?"
params = {'q': 'michael jackson','first': ''}
def get_bing_results(url):
q = 1
while q<=400:
params['first'] = q
res = requests.get(url,params=params,headers={
"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36"
})
soup = BeautifulSoup(res.text,"lxml")
for link in soup.select("#b_results h2 > a"):
print(link.get("href"))
time.sleep(2)
q+=10
if __name__ == '__main__':
get_bing_results(link)
【问题讨论】:
-
你能跟踪页码吗?如果当前循环中的页码与上一个循环中的页码相同那么break?
-
抱歉,下一个页码似乎是动态生成的,我无法使用请求进行跟踪。
-
BeautifulSoup 应该能够提取页码。还是应该在网址栏中对? (我以前没有这样做过)。
-
@MITHU,详细说明 2 个时刻:“新结果”和“网页一遍又一遍地显示最后的结果”——你如何区分那些“新”?
-
你可以拿着之前的汤对象和新的比较,如果它们匹配你就可以摆脱厕所,如果它们不同,继续吗?
标签: python python-3.x web-scraping