猿问

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

我想从多个网页中抓取所有 URL。它有效,但只有最后一个网页的结果保存在文件中。


from bs4 import BeautifulSoup

from urllib.request import Request, urlopen

import re

import requests


urls=['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 文件,那就更酷了。但是我尝试过的任何事情都离我很远......


翻过高山走不出你
浏览 416回答 2
2回答

开心每一天1111

嘿,这是我的第一个答案,所以我会尽力提供帮助。数据覆盖的问题在于您在一个循环中遍历您的 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 问题。
随时随地看视频慕课网APP

相关分类

Python
我要回答