爬虫初始

1. python网络请求模块

  • requests模块(主要)

  • urllib模块

2. requests模块

  • python中原生的一款基于网络请求的模块,功能强大,简单快捷,效率极高

  • 作用:模拟浏览器发请求

2.1 环境安装

  • pip install requests

  • ps:pycharm自带python环境,所以在电脑命令中安转可能在pycharm中导包不了,所以最好在pycharm的终端中进行安转

2.2 如何使用

  1. 指定url

  2. 向指定url发起请求

    • get请求

    • post请求

  3. 获取响应对象的数据值

  4. 持久化存储

  • 入门案例:

  • ps:对于爬取的html数据没有换行,可以在pycharm中全选代码后按ctrl+alt+L快捷键换行

3. 搜狗结果页采集(网页采集器)

3.1 UA检测与UA伪装

  • UA检测:

  • UA:User-Agent

  • 门户网站的服务器会检测对应请求的载体身份标识,如 果检测的请求的载体身份标识为某一浏览器 说明该请求为正常请求。但是,如果请求的载体身份标识不是基于某一款浏览器时,则标识该请求 是不正常的(爬虫),则服务器就有可能会拒绝该次请求,所以要进行UA伪装

  • UA伪装:让爬虫对应的请求载体身份标识伪装成某一浏览器

3.2 可变参数

  • 在页面参数设置时,可以设置自己输入控制可变参数来爬取自己想要的页面,如上的搜狗搜索结果页面

4. 破解百度翻译

4.1 关于ajax请求与服务器返回类型

  • ajax请求:即不刷新页面也能进行数据更新,ajax请求返回的就是json类型数据

  • 关于服务器返回的类型以及post请求的url可以在浏览器的抓包工具的XHR分类中查看

4.2 关于json格式

  • 可以把抓取到的json语句在json在线解析中解析成标准格式以查看内容

5. 豆瓣电影爬取

  • 跟破解百度翻译差不多

6. KFC餐厅查询爬取

  • ps: 如果抓取的数据类型不是json类型,也可以用json.loads()方法把抓取的字符串转换为json数据类型

6.1 关于多页数据的爬取

  • 我们爬取页面时有时候会遇到多页面,想全部爬取数据怎么办呢?

  • 如果是ajax请求页面一般会有类似于pageIndex和pageSize的参数,这个时候我们可以把pageSize参数的数据设置大一点就可以爬取所有页面的数据了,也可以在爬取的json文件动态获取总数据数进行爬取,或者用循环遍历所有的pageIndex获取

7. 综合练习-药监总局

7.1 关于发送请求中data与params区别

  • data:是添加到请求体中的,用于post请求

  • params:是添加到url的请求字符串中的,用于get请求

8. requests库的text方法、content方法、json类型的区别

  • text方法:返回字符串

  • content方法:返回二进制

  • json方法:返回对象

9. 关于post请求与get请求区别

  • post请求:

    • post请求没有编码集的限制

    • post参数在REQUSET BODY中,用户不可见,相对安全

    • 参数长度无限制

    • post请求会先把请求头发送到服务器进确认,然后才真正发送数据

    • post请求不会对数据进行缓存

    • post请求一般用于修改和写入数据

  • get请求:

    • get请求只能用ASCLL码

    • get请求参数在url中,用户可见

    • 浏览器会对url长度进行限制,所以get请求参数长度一般也会被限制,不同浏览器限制长度不一样

    • get请求会把请求头与数据一起发送

    • get请求会把数据进行缓存

    • get请求一般用于搜索排序和筛选之类的操作

最后更新于