为了账号安全,请及时绑定邮箱和手机立即绑定

抓取多个网页,但结果被最后一个url覆盖

抓取多个网页,但结果被最后一个url覆盖

翻过高山走不出你 2021-09-25 14:16:59
我想从多个网页中抓取所有 URL。它有效,但只有最后一个网页的结果保存在文件中。from bs4 import BeautifulSoupfrom urllib.request import Request, urlopenimport reimport requestsurls=['https://www.metacritic.com/browse/movies/genre/date?page=0', 'https://www.metacritic.com/browse/movies/genre/date?page=2', '...']for url in urls:    response = requests.get(url)    req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})    html_page = urlopen(req).read()    soup = BeautifulSoup(html_page, features="html.parser")links = []for link in soup.findAll('a', attrs={'href': re.compile("^/movie/([a-zA-Z0-9\-])+$")}):    links.append(link.get('href'))filename = 'output.csv'with open(filename, mode="w") as outfile:    for s in links:        outfile.write("%s\n" % s)我在这里缺少什么?如果我可以使用包含所有网址而不是列表的 csv 文件,那就更酷了。但是我尝试过的任何事情都离我很远......
查看完整描述

2 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

嘿,这是我的第一个答案,所以我会尽力提供帮助。


数据覆盖的问题在于您在一个循环中遍历您的 url,然后在另一个循环中遍历汤对象。


这将始终在循环结束时返回最后一个汤对象,因此最好的做法是将每个汤对象附加到 url 循环中的数组,或者在 url 循环中实际查询汤对象:


soup_obj_list = []

for url in urls:

    response = requests.get(url)

    req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})

    html_page = urlopen(req).read()

    soup = BeautifulSoup(html_page, features="html.parser")

    soup_obj_list.append(soup)

希望能解决你的第一个问题。无法真正帮助解决 csv 问题。


查看完整回答
反对 回复 2021-09-25
  • 2 回答
  • 0 关注
  • 414 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号