【python】获取百度搜索结果--URL\网站名称

需求:

  1. 只需输入搜索关键词
  2. 可设置搜索时间范围
  3. 可翻页
  4. 呈现搜索页每一条信息的标题、链接、网站名称、简介

一、针对需求1、2、3,需要解析百度搜索页的URL,探索其规则。以百度搜索“python”,时间设置为2018年12月31日前为例,其搜索页链接如下:

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=python&oq=sql&rsv_pq=f2b1057c002455b2&rsv_t=40b6gnX%2B6QaLU9z5efv2oooWZf%2BHzzKpuhWtnii9qAUMfO3797wqZ7uBodA&rqlang=cn&rsv_enter=1&rsv_dl=tb&inputT=2861&gpc=stf%3D-28800%2C1546271999%7Cstftype%3D2&tfflag=1

经测试,https://www.baidu.com/s?wd=关键词&gpc=stf=开始时间,结束时间|stftype=2即为按照指定时间搜索关键词的链接,时间需换算成Unix时间。

二、依照上述需求,针对百度搜索页面制定爬取规则可迅速获得搜索链接(百度搜索提供的链接,非正式链接)、标题简介,如下:

content = etree.HTML(response.text)
res_title = content.xpath('//*[@id="%d"]/h3/a' % ((i - 1) * 10 + j))
if res_title:
    title = res_title[0].xpath('string(.)')

sub_url = content.xpath('//*[@id="%d"]/h3/a/@href' % ((i - 1) * 10 + j))
if sub_url:
    sub_url = sub_url[0]

res_abstract = content.xpath('//*[@id="%d"]/div[@class="c-abstract"]'%((i-1)*10+j))
if res_abstract:
    abstract = res_abstract[0].xpath('string(.)')
else:
    res_abstract = content.xpath('//*[@id="%d"]/div/div[2]/div[@class="c-abstract"]'%((i-1)*10+j))
    if res_abstract:
        abstract = res_abstract[0].xpath('string(.)')

目前剩下没有解决的便是,每一条信息的正式链接和网站名称暂未获取。正式链接可通过requests库,requests.get(bd_search_url).url可输出正确的链接。网站名称则是通过获取网页链接的host,借助站长之家 网站备案查询工具获取,查询链接为'http://icp.chinaz.com/'+host,例如http://icp.chinaz.com/most.gov.cn。所需的网站名称显式存在于网页源代码中,可轻松获得。
【python】获取百度搜索结果--URL\网站名称_第1张图片

tips:用此方法获取百度搜索结果的网站名称爬取了几十页搜索结果后意外发现
1.不少政府网站居然没有网安备案。。
2.站长之家的这个工具屏蔽了百度的地址,故baidu.com无法查询。

你可能感兴趣的:(爬虫)