我想从Alexa爬取前100万名的给定列表,以检查哪个网站仍通过http://提供访问权限,并且不要重定向到https://。 如果网页未重定向到https://域,则应将其写入csv文件。
当我添加一堆多个URL时出现问题。超过两个错误:
或
我尝试了以下主题和文档中提到的机会:
和其他一些交付的解决方案。
设置verify = False的选项很有帮助,当它用于几个URL时有用,但是当使用“列表”> 10个URL时却无济于事。我在Win10机器和Ubuntu 16.04上尝试了我的程序。 不出所料,同样的问题。我还尝试了使用Sessions的选项,并安装了Sugested的证书库。
如果我只是称呼三个页面,例如“ http://www.example.com”,“ https://www.github.com”和“ http://www.python.org”,那没什么大不了的,并且提供了解决方案。当使用Alexa列表中的一堆URL时,头痛就开始了。
这是我的代码,仅用于3-4个网址时有效:
import requests
from requests.utils import urlparse
urls = ['http://www.example.com',
'http://bloomberg.com',
'http://github.com',
'https://requestbin.fullcontact.com/']
with open('G:\\Request_HEADER_Suite/dummy/http.csv', 'w') as f:
for url in urls:
r = requests.get(url, stream=True, verify=False)
parsed_url = urlparse(r.url)
print("URL: ", url)
print("Redirected to: ", r.url)
print("Status Code: ", r.status_code)
print("Scheme: ", parsed_url.scheme)
if parsed_url.scheme == 'http':
f.write(url + '\n')
我希望至少检索具有100个URL的列表。该代码应写入可通过http://访问的URL,并且不要将其重定向到https://到csv文件或补充数据库中,并忽略所有带有https://的URL。
由于它仅适用于少数几个URL,因此我希望有一个稳定的机会进行较大的扫描。
但是有2个错误引发并破坏程序。是否值得尝试使用pytest解决方法?还有其他建议吗?预先感谢。
编辑: 这是一个列表,将引发错误。仅作澄清,此列表来自基于Alexa-Top-1-Million的研究。
urls = ['http://www.example.com',
'http://bloomberg.com',
'http://github.com',
'https://requestbin.fullcontact.com/',
'http://51sole.com',
'http://58.com',
'http://9gag.com',
'http://abs-cbn.com',
'http://academia.edu',
'http://accuweather.com',
'http://addroplet.com',
'http://addthis.com',
'http://adf.ly',
'http://adhoc2.net',
'http://adobe.com',
'http://1688.com',
'http://17ok.com',
'http://17track.net',
'http://1and1.com',
'http://1tv.ru',
'http://2ch.net',
'http://360.cn',
'http://39.net',
'http://4chan.org',
'http://4pda.ru']
我仔细检查了一下,最后一次错误以URL 17.ok.com开始。但是我也尝试了使用URL的不同列表。感谢您的支持。