【发布时间】:2020-12-31 00:54:36
【问题描述】:
这是我在这里的第一个问题。最近我参加了一门网络抓取课程,想自己做点什么,但我被卡住了。那么问题来了:
我在一个文件中有 120k 个网址。网址看起来像这样www.example.com/.../3542/../may/.。 因此,我们总共有 10 000 个组合 (0000-9999) 乘以 12 个月,即 120 000 个链接。
我看到其中一些返回 HTTP ERROR 500,其中一些重定向到指定页面,其余应该是我需要的,但我正在努力过滤我不需要的那些。
我尝试在 try catch 块中使用 urllib.request.openurl(url) 来过滤 http 500 代码。还使用 BeautifulSoup 检索网页的标题并检查它是否与我被重定向到的页面匹配。但是,这似乎真的很慢。
我尝试使用“请求”按状态代码进行过滤,但这也不快。
这是我上面所说的代码的一部分:
# fname is a file handle
for line in fname:
try:
f = urllib.request.urlopen(line)
soup = BeautifulSoup(f.read().decode(), 'html.parser')
title = soup.title.string
if title != "Redirected Title":
filtered_links.write(line)
except:
pass
我想知道仅以某种方式访问标题是否更快以及如何实现它。
感谢您抽出宝贵时间分享一些关于修复或不同方法的知识。
【问题讨论】:
-
也许您可以采用异步方法,使用 asyncio 和 aiohttp。
-
我也强烈推荐aiohttp,它更快
标签: python web-scraping urllib