-
基于request获取百度返回结果:本文基于request进行访问有可能导致SSLError(这有可能是由于本文是访问https所导致的)。但这篇博客较完整地介绍了对html使用etree,json对返回结果进行解析的操作,可以借鉴。
-
Python3网络爬虫(一):利用urllib进行简单的网页抓取:这篇主要使用urllib进行抓取,代码简单易懂非常方便。但缺少进一步的格式化处理,可以结合第1篇理解。
一开始我们以requests.exceptions.SSLError: HTTPSConnectionPool这个错误进行检索,遇到了python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool,遇到了解决python爬虫requests.exceptions.SSLError: HTTPSConnectionPool(host=‘XXX’, port=443)问题,走了一些弯路,他们的方法是否有用我也不得而知。
-
使用urllib返回的结果不全的解决。
目前的代码,存在返回的结果很少的问题。from urllib import request wd = 'python' response = request.urlopen("http://www.baidu.com/s?wd="+wd) html = response.read()
(1)首先分析返回html结果中
<title>\xe7\x99\xbe\xe5\xba\xa6\xe5\xae\x89\xe5\x85\xa8\xe9\xaa\x8c\xe8\xaf\x81</title>
,使用response.read().decode('utf-8')
可得知其含义为<title>百度安全验证</title>
。猜测:我们由于没有传入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已经正常啦~
-
解析html遇到层级关系的“标题”-“摘要”-“链接”对应问题。在第1篇博客中,作者直接解析所有的h3标题和所有的abstract(而从浏览器的F12来看,他们的关系并非一一对应)