【发布时间】:2019-12-18 10:50:27
【问题描述】:
我正在开发一个 webscraper,它可以打开一个网页,并打印该网页中的任何链接如果链接包含关键字(我稍后会打开这些链接以进行进一步的抓取)。
例如,我正在使用请求模块打开“cnn.com”,然后尝试解析该网页中的所有 href/链接。然后,如果任何链接包含特定单词(例如“china”),Python 应该打印该链接。
我可以简单地使用请求打开主页,将所有 href 保存到列表(“链接”)中,然后使用:
links = [...]
keyword = "china"
for link in links:
if keyword in link:
print(link)
但是,这种方法的问题是我最初解析出来的链接不是完整的链接。例如,所有与 CNBC 网页的链接都是这样的结构:
href="https://www.cnbc.com/2019/08/11/how-recession-affects-tech-industry.html"
但是对于 CNN 的页面,它们是这样写的(不是完整的链接……它们缺少“/”之前的部分):
href="/2019/08/10/europe/luxembourg-france-amsterdam-tornado-intl/index.html"
这是一个问题,因为我正在编写更多脚本来自动打开这些链接来解析它们。但是Python打不开
"/2019/08/10/europe/luxembourg-france-amsterdam-tornado-intl/index.html"
因为它不是一个完整的链接。
那么,什么是强大的解决方案(也适用于其他网站,而不仅仅是 CNN)?
编辑:我知道我在这篇文章中作为示例写的链接不包含“中国”一词,但这只是示例。
【问题讨论】:
-
添加域?
"https://www.cnn.com" + href。如果域是动态的,请使用变量。 -
@TrebledJ 我正在考虑这样做,但我有 50 个不同的“新闻网站”,所以我不能简单地将“cnn.com”添加到所有网站上。我想知道 Python 是否有办法自动将正确的链接添加到 href 中?
-
如果没有您正在使用的刮板的最小示例,很难说...我假设要刮掉一个您将调用函数的网站?或者实例化一个新的类实例?将域作为另一个参数传递,如果链接是部分链接,则添加域。
-
IIRC scrapy 没有这个问题。它们具有自动跟随链接的功能。可能值得学习。
-
Hiw 轻松制作绝对链接:stackoverflow.com/questions/44001007/…
标签: python-3.x parsing web-scraping hyperlink href