• 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)
  • 相关阅读:
    浏览器渲染原理
    react ssr 从0到1实践
    阿里的上线水准
    http各个版本(1/1.1/2)对比
    可监控、可灰度、可回滚为什么会成为挑战?
    HTTP1、HTTP1.1、http2、http3的区别
    关于队头阻塞(HeadofLine blocking),看这一篇就足够了
    document.ready和window.onload的区别
    HTTP1和HTTP2的区别
    html,css,js加载顺序
  • 原文地址:https://www.cnblogs.com/yaomaomao/p/8743913.html
Copyright © 2020-2023  润新知