获取百度搜索的返回结果

  1. 基于request获取百度返回结果:本文基于request进行访问有可能导致SSLError(这有可能是由于本文是访问https所导致的)。但这篇博客较完整地介绍了对html使用etree,json对返回结果进行解析的操作,可以借鉴。

  2. Python3网络爬虫(一):利用urllib进行简单的网页抓取:这篇主要使用urllib进行抓取,代码简单易懂非常方便。但缺少进一步的格式化处理,可以结合第1篇理解。

    一开始我们以requests.exceptions.SSLError: HTTPSConnectionPool这个错误进行检索,遇到了python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool,遇到了解决python爬虫requests.exceptions.SSLError: HTTPSConnectionPool(host=‘XXX’, port=443)问题,走了一些弯路,他们的方法是否有用我也不得而知。

  3. 使用urllib返回的结果不全的解决。
    目前的代码,存在返回的结果很少的问题。

    from urllib import request
    wd = 'python'
    response = request.urlopen("http://www.baidu.com/s?wd="+wd)
    html = response.read()
    

    (1)首先分析返回html结果中\xe7\x99\xbe\xe5\xba\xa6\xe5\xae\x89\xe5\x85\xa8\xe9\xaa\x8c\xe8\xaf\x81,使用response.read().decode('utf-8')可得知其含义为百度安全验证。猜测:我们由于没有传入head而引起目标网站的怀疑,尝试传入head。将代码修改:

    from urllib import request
    wd = 'python'
    url = "http://www.baidu.com/s?wd="+wd
    headers = {'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
    req = request.Request(url=url, headers=headers, method='GET')
    response = request.urlopen(req)
    html = response.read().decode('utf-8')
    print(html)
    

    执行之后发现html已经正常啦~

  4. 解析html遇到层级关系的“标题”-“摘要”-“链接”对应问题。在第1篇博客中,作者直接解析所有的h3标题和所有的abstract(而从浏览器的F12来看,他们的关系并非一一对应)

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