结构化爬虫——通过搜索抓取网站
本次主要分享如何像人类使用搜索条一样爬取网站,即在网站上搜索关键词或者主题并收集搜索结果。
前期准备
通过搜索抓取网站会随着网站的不同而有很大可变性的任务,因此在爬取之前要注意分析url的共同点并且构造好相关函数。本次爬取选取百度网站来抓取几个不同关键词的结果(因为国内可用的搜索引擎差距不大,所以只选取百度一个来进行演练。)
- 网站分析:可以发现,百度网址资讯板块里面针对不同的关键词的差别主要“word=keywords”,因此只要控制好了keywords,就可以比较好的定位到关键词。
https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&word=python
https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&word=cad
- 进一步分析:搜索关键词之后,会出现许多结果链接,通过对网站进行检查发现许多结果链接存在于“div.result h3 a ”标签下,这可以进一步定位结果链接;而每个结果链接可能是相对链接(如/articles/page.html)或者绝对链接(如https://www.baidu.com/articles/page.html),这些都需要在定义函数时进行处理,作为筛选确定结果链接的条件。
- 类的定义:
class Content:
#所有文章/网页的共同基类
def __init__(self,topic,url,title,body):
self.topic=topic
self.url=url
self.title=title
self.body=body
def print(self):#打印函数,控制结果输出,方便引用
print("找到的相关关键字的文章:{}".format(self.topic))
print("网址:{}".format(self.url))
print("标题:{}".format(self.title))