我试图从NHTSA崩溃查看器(CIREN案例)下载一些图像。案例https://crashviewer.nhtsa.dot.gov/nass-CIREN/CaseForm.aspx?xsl=main.xsl&CaseID=99817的一个例子 如果我尝试下载正面碰撞图像,则没有下载任何文件。我正在使用beautifulsoup4和请求库。此代码适用于其他网站
我也尝试过SO之前的答案,但没有一个解决方案有效,错误如下: 无响应表单服务器
用于web抓取的代码
from bs4 import *
import requests as rq
import os
r2 = rq.get("https://crashviewer.nhtsa.dot.gov/nass-CIREN/GetBinary.aspx?Image&ImageID=555004572&CaseID=555003071&Version=0")
soup2 = BeautifulSoup(r2.text, "html.parser")
links = []
x = soup2.select('img[src^="https://crashviewer.nhtsa.dot.gov"]')
for img in x:
links.append(img['src'])
os.mkdir('ciren_photos')
i=1
for index, img_link in enumerate(links):
if i<=200:
img_data = rq.get(img_link).content
with open("ciren_photos\\"+str(index+1)+'.jpg', 'wb+') as f:
f.write(img_data)
i += 1
else:
f.close()
break
这是一项需要硒元素的任务,但幸运的是有一条捷径。在页面顶部有一个“仅限文本和图像”链接,指向这样一个页面:https://crashviewer.nhtsa.dot.gov/nass-CIREN/CaseForm.aspx?ViewText&CaseID=99817&xsl=textonly.xsl&websrc=true,该页面包含一个页面中的所有图像和文本内容。您可以使用
soup.find('a', text='Text and Images Only')
选择该链接该链接和图像链接是相对的(指向同一站点的链接通常是相对链接),因此您必须使用^{} 来获取完整的URL
因此,除非请求具有有效的cookie,否则该站点不会返回有效的图片。获取cookie有两种方法:使用来自前一个请求的cookie或使用^{} 对象。最好使用会话,因为它还处理TCP连接和其他参数
相关问题 更多 >
编程相关推荐