我正在使用selenium来抓取一堆以格式和样式混合提供的文件 - 试图同时处理html和pdf,当链接的目标是pdf时我遇到了一个问题文件,但链接本身不包含'.pdf'e.g.,and(请注意,一个会自动下载,一个只显示文件 - 至少在Chrome中 - 所以可能需要测试两种不同类型的pdf目标?)
有没有办法以编程方式告诉链接的目标是否为pdf,而不仅仅是检查它是否以.pdf结尾?
我不能只是下载文件而不管内容,因为我对html文件有明确的处理,我想跟随二级链接,看看我是否能找到pdf,如果目标是直接pdf。
ETA:接受的答案非常有效 - 链接的潜在欺骗是用于在文件系统上进行测试,而不是用于下载,因此我认为这不是有效的,当然下面的答案对于这种情况更好。
答案 0 :(得分:2)
Selenium(或Chrome)检查'Content-Type'
标题并选择要执行的操作。您还可以自己使用'Content-Type'
检查网址的requests
,如下所示:
>>> r = requests.head('http://resus.org.au/?wpfb_dl=17')
>>> pprint(dict(r.headers))
{'Accept-Ranges': 'bytes',
'Age': '7983',
'Cache-Control': 'no-cache, must-revalidate, max-age=0',
'Content-Description': 'File Transfer',
'Content-Disposition': 'attachment; '
'filename="anzcor-guideline-6-compressions-jan16.pdf"',
'Content-Length': '547978',
'Content-MD5': 'ULcX0oCGbhW/f8NkQ+6llg==',
'Content-Type': 'application/pdf',
'Date': 'Fri, 20 May 2016 01:28:53 GMT',
'Expires': 'Wed, 11 Jan 1984 05:00:00 GMT',
'Last-Modified': 'Thu, 19 May 2016 23:15:50 GMT',
'Pragma': 'no-cache',
'Vary': 'User-Agent',
'X-Backend': 'all_requests',
'X-Cache': 'cached',
'X-Cache-Hit': 'HIT',
'X-Cacheable': 'YES:Forced',
'X-Port': 'port_10081'}
>>> r = requests.head('http://www.mndaust.asn.au/Documents/Information-resources/MND-Aspects-of-care-for-the-primary-health-care-te.aspx')
>>> pprint(dict(r.headers))
{'Accept-Ranges': 'bytes',
'Cache-Control': 'public, must-revalidate',
'Content-Disposition': 'inline; '
'filename="MND-Aspects-of-care-for-the-primary-health-care-team-2014-FINAL.pdf"',
'Content-Length': '691752',
'Content-Type': 'application/pdf',
'Date': 'Fri, 20 May 2016 01:30:49 GMT',
'ETag': '"en-au|a1b5237a-d4d7-4f5e-a936-a112637291da|8/4/2014 12:18:16 '
'AM|LiveSite"',
'Expires': 'Fri, 20 May 2016 02:00:50 GMT',
'Last-Modified': 'Mon, 04 Aug 2014 00:18:16 GMT',
'Server': 'Microsoft-IIS/7.5',
'X-AspNet-Version': '4.0.30319',
'X-Powered-By': 'ASP.NET'}
如您所见,您的两个链接中的'Content-Type'
都是'application/pdf'
:
>>> r.headers['Content-Type']
'application/pdf'
所以你可以检查requests.head(link).headers['Content-Type']
的输出,并做你需要的任何事情。