上善若水,不进则退

姚毛毛

左手代码,右手写诗

linuxido.com

python3+beautifulSoup4.6抓取某网站小说(一)爬虫初探

本次学习重点:

1、使用urllib的request进行网页请求,获取当前url整版网页内容

2、对于多级抓取,先想好抓取思路,再动手

3、BeautifulSoup获取html网页中的指定内容

4、使用多线程,加快抓取速度

本次抓取不涉及反爬虫知识。

 

本章学习内容:

1、最简单的request请求网页,有注释,不细说了

# -*- coding: UTF-8 -*-
from urllib import request


#获取request python2可以直接使用urllib2

# 直接请求
response = request.urlopen('http://www.baidu.com')
 
# 获取状态码,如果是200表示获取成功
print(response.getcode())
 
# 读取内容
cont = response.read()
print(cont)

2、User-Agent模拟浏览器请求,这个是网站最简单的防爬虫程序,服务器通过Headers中的User Agent来判断是谁在访问。

当然,道高一尺魔高一丈,python的urllib库中的request可以设置Headers来模拟浏览器访问。

# -*- coding: UTF-8 -*-
from urllib import request

if __name__ == "__main__":
    #以CSDN为例,CSDN不更改User Agent是无法访问的
    url = 'http://www.csdn.net/'
    head = {}
    #写入User Agent信息
    head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
    #创建Request对象
    req = request.Request(url, headers=head)
    #传入创建好的Request对象
    response = request.urlopen(req)
    #读取响应信息并解码
    html = response.read()
    print(html)

具体的User-Agent参考链接:https://blog.csdn.net/c406495762/article/details/60137956

 

3、https网站的访问,最简单的ssl配置

记得4月前第2步的代码还是可以访问的,但是前几天又运行这个代码不能访问了,报

urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)>

,搜索了下,发现是https导致的这个问题,又看了下csdn,发现变成https网站了。

又最以上代码中加了一行

   context = ssl._create_unverified_context()

    #传入创建好的Request对象
    response = request.urlopen(req, context=context)  

当然,则是最简单的绕过办法,一劳永逸,还是应该安装个证书。

本次解决办法参考文章:https://blog.csdn.net/bernieyangmh/article/details/74578759

完整代码如下:

# -*- coding: UTF-8 -*-
from urllib import request
import ssl

if __name__ == "__main__":
    #以CSDN为例,CSDN不更改User Agent是无法访问的
    url = 'http://www.csdn.net/'
    head = {}
    #写入User Agent信息
    head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'

    #ssl._create_default_https_context = ssl._create_unverified_context('')

    #创建Request对象
    req = request.Request(url, headers=head)

    context = ssl._create_unverified_context()

    #传入创建好的Request对象
    response = request.urlopen(req, context=context)
    #读取响应信息并解码
    html = response.read()
    print(html)
    html = html.decode('utf-8')
    # 打印信息
    print(html)

 

 

posted @ 2018-04-08 11:26  姚毛毛  阅读(427)  评论(0编辑  收藏  举报