我想从多个网页中抓取所有 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 问题。
添加回答
举报
0/150
提交
取消