极客爬虫的top250为啥我一样的代码可以运行但是打印不出任何东西?
import requestsimport bs4
res = requests.get("https://movie.douban.com/top250")
soup = bs4.BeautifulSoup(res.text, "html.parser")
targets = soup.find_all("div", class_="hd")
for each in targets:
print(each.a.span.text) 可能的原因有以下几点:
1. **请求被阻止**:豆瓣可能会阻止来自某些IP地址的请求,或者需要特定的请求头信息。你可以尝试在请求中添加一些头信息,比如`User-Agent`,以模拟浏览器请求。
2. **页面结构变化**:豆瓣的页面结构可能发生了变化,导致`find_all`方法没有找到任何匹配的元素。你可以检查页面的HTML结构,确认`"div", class_="hd"`是否仍然存在。
3. **网络问题**:网络连接问题可能导致请求没有成功返回页面内容。可以检查网络连接,或者尝试在不同的时间段运行代码。
可以尝试以下方法来解决:
import requests
import bs4
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
res = requests.get("https://movie.douban.com/top250", headers=headers)
soup = bs4.BeautifulSoup(res.text, "html.parser")
targets = soup.find_all("div", class_="hd")
for each in targets:
print(each.a.span.text)
尝试添加`User-Agent`头信息,并确保页面结构没有变化。如果问题仍然存在,可以进一步检查网络连接或使用代理。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 我加了一行:
print(res)
发现输出“<Response >”,说明被拦截了,你需要用 User Agent
import requests
import bs4
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
}
res = requests.get("我权限不够,你自己改掉", headers=headers)
soup = bs4.BeautifulSoup(res.text, "html.parser")
targets = soup.find_all("div", class_="hd")
for each in targets:
print(each.a.span.text)
本帖最后由 小甲鱼的二师兄 于 2024-12-6 00:44 编辑
<Response > 是指你的爬虫请求返回了 HTTP 状态码 418,也就是 “I'm a teapot” 状态码。这是一个愚人节玩笑性质的状态码,但在某些情况下,它可能被用作限制或阻止爬虫的标志。
[*]HTTP 418 状态码来源于 RFC 2324,原本是作为一个幽默提案的“Hyper Text Coffee Pot Control Protocol (HTCPCP)”的一部分。
[*]它的原始语义是 “我是一个茶壶,无法冲泡咖啡”,表示服务器拒绝完成请求,因为它的功能设计不支持。
[*]实际使用中,很多服务器、CDN 或反爬虫系统会用 418 来标识某些类型的非法请求,或者作为一种防护机制来对抗爬虫。
服务器可能检测到你的请求模式、User-Agent 或其他特征,不符合正常用户的行为,因此返回 418 状态码。
确保你的请求头中包含一个合理的 User-Agent,伪装成正常的浏览器行为。例如:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers) 本帖最后由 isdkz 于 2024-12-6 16:17 编辑
import requests
import bs4
res = requests.get("https://movie.douban.com/top250", headers={"User-Agent": ""})
soup = bs4.BeautifulSoup(res.text, "html.parser")
targets = soup.find_all("div", class_="hd")
for each in targets:
print(each.a.span.text)
页:
[1]