python - urlopen中的url.request奇怪的行为python3
问题描述
我正在尝试从 url 列表中查找无法访问的 url。代码如下:
def sanity(url,errors):
global count
count+=1
if count%1000==0:
print(count)
try:
if 'media' in url[:10]:
url = "http://edoola.s3.amazonaws.com" + url
headers={'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36",
}
req=urllib.request.Request(url,headers=headers)
ret = urllib.request.urlopen(req)
return 1
except:
print(e, url)
errors.append(url)
return 0
limit=1000
count=0
errors = []
with open('file.csv','r',encoding="utf-8") as file:
text = file.read()
text = str(text)
urls = re.findall(r'<img.*?src=""(.*?)""[\s>]', text, flags=re.DOTALL)
arr = list(range(0,len(urls)+1,limit))
start=0
for i in arr:
threads = [threading.Thread(target=sanity, args=(url, errors,)) for url in urls[start:i]]
[thread.start() for thread in threads]
[thread.join() for thread in threads]
if i==0:
start=0
else:
start=i+1
print(errors)
with open('errors_urls.txt','w') as file:
file.write('\n'.join(errors))
该代码正确运行 1000 次,但在接下来的一千个打印 URL 中可以从我的 chrome 浏览器访问。我已经研究过这个,还有其他的。我已经在 ipython 终端中尝试了这些方法,选择了一个特定的 url,并且效果很好。但是当我对上面的代码采用相同的方法时。我得到了可访问的网址。我该如何解决这个问题?
网址数量约为 15000 个。因此,在上面的代码中,我以 1000 个块运行,因此产生了 1000 个线程。
任何帮助表示赞赏!
解决方案
推荐阅读
- python - 包含 utf-16 编码的 xml 文件有问题吗?
- github - 在 GitHub 页面上托管引发 404 错误
- html - 在添加容器后的引导 4 导航栏中,内容自动右对齐
- windows - 如何在 64 位 Windows 上使用 CMAKE for AWS SDK 构建 32 位 VS 项目
- spring - ActiveMq 消息转换器不适用于 JmsTemplate
- r - 过滤r中的最新日期
- c# - 将变量用作带有 MessageBoxButtons 的按钮类型
- c++ - 线-"矢量是什么意思
使用(adj.size(),0);“? - python - 使用 google-api-client 将大文件从客户端上传到 GDrive,使用存储在内存中的烧瓶/python 中的可恢复上传
- html-table - 在bulma中对齐表格单元格(td)内容