【发布时间】:2020-12-25 07:20:36
【问题描述】:
我正在尝试从网站的着陆页中抓取图像。所有图像都在search_results 类名内。当我运行下面的脚本时,我没有得到任何结果。我检查了status_code,发现脚本正在获取403。
由于图像是静态的并且在页面源中可用,我如何使用请求抓取图像链接?
import requests
from bs4 import BeautifulSoup
url = 'https://pixabay.com/images/search/office/'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36',
}
r = requests.get(url,headers=headers)
print(r.status_code)
soup = BeautifulSoup(r.text,"lxml")
for item in soup.select(".search_results a > img[src]"):
print(item.get("src"))
与任何浏览器模拟器相关的任何解决方案,例如 selenium,都不是我想要的。
【问题讨论】:
-
HTTP 403 错误意味着服务器不想与您交谈。也许它认为你是一个机器人(你是)。
-
非常有用的评论@John Gordon。谢谢。
-
还有其他问题 - 此页面使用 JavaScript 添加项目(在 Web 浏览器中关闭 JavaScript 并检查您的 url)但
requests和BeautifulSoup无法运行JavaScript。即使您获得状态200,您也无法获得图像。你可能需要Selenium`来控制可以运行JavaScript的网络浏览器 -
如果您显示
r.text,那么您会看到包含有关 CAPTCHA 信息的 HTML。还有消息Please turn JavaScript on and reload the page.和Please enable Cookies.这可以解释问题403- 它使用JavaScript 和Cookies来检查它是否是真正的网络浏览器。
标签: python python-3.x web-scraping python-requests