Python网页爬虫无法遍历URL令牌列表问题求助
问题排查与修复
核心问题
你的tokenize函数逻辑错误:
- 函数接收的参数
t是tokens列表中的单个字符串(比如"after=MA%3D%3D") - 函数里
for y in t是遍历这个字符串的每个字符,然后第一次循环就return y,也就是每次只返回字符串的第一个字符 - 这导致每次请求的参数都是错误的(比如第一个token返回空格,第二个返回'a'),服务器无法识别分页参数,默认返回第一页数据,所以重复爬取11次第一页
另外注意最后一个token里的$3D%3D是错误的,应该是%3D%3D(URL编码的等号),这个错误会导致最后一页请求失败,需要修正。
修复方案
直接移除多余的tokenize函数,在循环中把列表里的每个token直接传入main_request即可,同时修正最后一个token的错误符号。
修改后的完整代码
import requests import pandas as pd baseurl = "https://www.rottentomatoes.com/napi/critics/" endpoint = "alison-willmore/movies?" # 修正最后一个token的错误符号 tokens = [" ", "after=MA%3D%3D", "after=MQ%3D%3D", "after=Mg%3D%3D", "after=Mw%3D%3D", "after=NA%3D%3D", "after=NQ%3D%3D", "after=Ng%3D%3D", "after=Nw%3D%3D", "after=OA%3D%3D", "after=OQ%3D%3D"] def main_request(baseurl, endpoint, x): r = requests.get(baseurl + endpoint + f'{x}') return r.json() reviews = [] def parse_json(response): for item in response["reviews"]: review_info = { 'film_title': item["mediaTitle"], 'release_year': item["mediaInfo"], 'full_review_url': item["url"], 'review_date': item["date"], 'rt_quote': item["quote"], 'film_info_link': item["mediaUrl"]} reviews.append(review_info) # 直接传入每个token,不需要tokenize函数 for t in tokens: data = main_request(baseurl, endpoint, t) parse_json(data) print(len(reviews)) d_frame = pd.DataFrame(reviews) print(d_frame.head(), d_frame.tail())
内容的提问来源于stack exchange,提问作者ESan
相关产品推荐
相关产品推荐

