美文网首页
Python -模块-爬虫思路&requests模块使用

Python -模块-爬虫思路&requests模块使用

作者: 吴加明 | 来源:发表于2019-07-10 08:26 被阅读0次

    爬虫思路

    无思路不成器,如果你怎么想都想不出爬虫的原理,不妨来看下我们平时是如何上网的,大概就是这样:
    ①点开目标网址→→[可选:登录/回复]→→②浏览全页筛选出价值内容→→③如果很喜欢,还会拷贝下载回来
    所以爬虫归结起来也就这几步:
    1.构造目标网址(重点)
    2.发起请求(request),相当于点开网页。
    3.获取网页内容(坑)。
    4.定制筛选器,对内容进行筛选(重点)。
    5.把爬取结果保存到容器里。

    F12审查元素

    这是浏览器自带的工具,提供抓包和检查网页源码的功能,供使用者分析网页。也是学爬虫必须要学会的工具,一个优秀的虫爸/虫妈应该花更多的时间在网页分析和debug上。
    使用非常简单,打开任一浏览器(如google chrome),按F12或鼠标右键检查。

    • 选择Element是查看网页源码,是树结构的html文档,里面有要爬取的内容。
    • 选择Network是查看本地和服务器端交互的包,可以从中获取目标网址和headers。

    requests模块

    为什么选择requests,因为它能完全胜任python自带的urllib模块,简化了不必要的功能的同时让使用更加简单。

    1.安装

    非常简单,打开cmd,直接pip安装

    pip install requests
    

    或pycharm中搜索requests安装

    小提示:pip正确打开方式:

    • pip路径可以加到环境变量中。
    • 把python安装目录下\Scripts\pip.exe拖动到cmd命令符后面,然后接上 install requests
    2.简单使用

    首先呈上官方文档,有中文版,欢迎来啃。
    下面主要介绍两种方法:get和post

    • get,就是本地向服务器索取的意思,服务器检查请求头(request headers)后,如果觉得没问题,就会返回信息给本地。
    r = requests.get(url,**args)#返回一个Response对象,我们可以从这个对象中获取所有我们想要的信息
    
    • post,就是本地要向服务器提交一些数据的意思,服务器还是会检查请求头,如果提交的数据和请求头都没问题,就会返回信息给本地。
    r = requests.post(url,**args)#也是返回Response对象
    
    3.参数详解

    get和post方法中有许多参数可以使用,部分参数后面会详解。

    • url:就是目标网址,接收完整(带http)的地址字符串。
    • headers:请求头,存储本地信息如浏览器版本,是一个字典。
    • data:要提交的数据,字典。
    • cookies:cookies,字典。
    • timeout:超时设置,如果服务器在指定秒数内没有应答,抛出异常,用于避免无响应连接,整形或浮点数。
    • params:为网址添加条件数据,字典。
    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.get("http://httpbin.org/get", params=payload)
    #相当于目标网址变成了http://httpbin.org/get?key2=value2&key1=value1
    
    • proxies:ip代理时使用,字典。
    4.Response对象使用

    从这个对象中获取所有我们想要的信息非常简单,毕竟爬虫要的数据主要就三种,html源码,图片二进制数据,json数据,Response对象一次性满足你三个愿望。

    r.encoding = 'ISO-8859-1'    #指定r.text返回的数据类型,写在r.text之前。
    r.text    #默认以unicode形式返回网页内容,也就是网页源码的字符串。
    
    r.content    #以二进制形式返回网页内容,下载图片时专用。
    r.json()    #把网页中的json数据转成字典并将其返回。
    
    #还有一些很少用到的方法。
    r.headers    #返回服务器端的headers,字典。
    r.status_code    #返回连接状态,200正常。
    
    
    5.小实例

    requests 学完后就可以到处试试了,如果红了(抛出异常),那大概是服务器拒绝你了,毕竟伪装什么的还没提到,服务器知道你是虫子就把你踢掉了。

    import requests
    r = requests.get('http://www.qzqz.cn/')
    r.encoding = 'utf-8'
    with open('test.txt','w',encoding = 'utf-8') as file:#编码要对应
        file.write(r.text)
        #然后打开看看吧,是不是和F12看到的源码一样,只不过是把分支全展开了而已。
    

    小提示:并不是所有网站的F12源码和爬取源码是一致的,网站有动态的,也有静态的;有防爬虫的,也有敞开大门任意爬的。

    本文摘自https://segmentfault.com/blog/papapa,有改动,该专栏有非常不错的系列教程。

    相关文章

      网友评论

          本文标题:Python -模块-爬虫思路&requests模块使用

          本文链接:https://www.haomeiwen.com/subject/brtckctx.html