爬虫开发01--request模块

本文详细介绍了Python的request模块,包括模块的编码流程、解决响应中文乱码问题以及多个实战示例,如不同类型的GET、POST请求,处理Ajax返回的JSON数据,动态加载数据的抓取等。

 

目录

request模块

request模块的编码流程

解决response返回中文乱码问题

request实战

1、爬取整个页面的数据--不带参数的get请求

2、爬取整个页面的数据--带请求参数params和请求头headers的get请求

3、爬取页面局部数据(Ajax请求返回json数据)--带参数的post请求

4、爬取页面局部数据(鼠标滚动,获取页面动态加载的json数据)--带参数的post请求

5、爬取页面局部数据(按照查询的关键字,获取页面动态加载的文本数据)--带参数的post请求

6、通过页面动态加载,获取公司id,再通过id获取公司详情信息--post请求

7、图片数据爬取


request模块

  • python中原生的一款基于网络请求的模块,功能强大,简单便捷,效率很高;
  • 模拟浏览器发请求;
  • 同类的比较老的模块是urllib模块;
  • 安装:pip install --user requests

 

request模块的编码流程

  1. 指定url
  2. 发起请求
  3. 获取响应数据
  4. 持久化存储

 

解决response返回中文乱码问题

  • response.encoding = 'utf-8',指定响应报文的编码格式(中文乱码情况);response默认使用iso-8859-1编码对消息体进行编码,传送数据给客户端。
  • 已经爬好的带有\u5430的字符串怎么转为正常的中文显示字符串?
    • python3: 字符串.encode(‘utf-8’).decode(‘unicode_escape’)

 

request实战

1、爬取整个页面的数据--不带参数的get请求

需求:爬取搜狗首页的页面数据

爬取地址:https://www.sogou.com/

 

获取不带参数的get请求的响应报文

# 1、需求:爬取搜狗首页的页面数据
# 获取不带参数的get请求的响应报文
import requests

def getHtmlPageText():
    # 指定url
    url = 'https://www.sogou.com/'
    # 发起请求
    response = requests.get(url)
    # 获取字符串类型的响应数据(参考接口返回的Content-Type类型)
    page_text = response.text
    # 持久化存储
    with open('./sougou.html', 'w', encoding='UTF-8') as file:
        file.write(page_text)
    print('爬虫结束')

if __name__ == '__main__':
    getHtmlPageText()

输出结果:当前脚本目录保存sougou.html

 

2、爬取整个页面的数据--带请求参数params和请求头headers的get请求

需求:爬取搜狗指定词条对应的搜索结果页面(简易网页采集器)

爬取地址:https://www.sogou.com/

 

请求参数params和请求头headers的get请求

  • 封装请求参数params请求头headers的字典;
  • params,请求带有参数;
  • headers,请求访问时,要UA伪装,伪装是浏览器发起的请求,就要设置User-Agent(请求载体的身份标识);
  • UA检测,指门户网站的服务器会检测,对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器,说明该请求是一个正常的请求;如果检测到请求的载体身份标识不是基于某一款浏览器的,则表示该请求为不正常的请求(即爬虫),服务器端就可能拒绝该次请求;
  • UA伪装,让爬虫对应的请求载体身份标识伪装成某一款浏览器;
  • response.encoding = 'utf-8',指定响应报文的编码格式(中文乱码情况);response默认使用iso-8859-1编码对消息体进行编码,传送数据给客户端。
  • 已经爬好的带有\u5430的字符串怎么转为正常的中文显示字符串?
    • python3: 字符串.encode(‘utf-8’).decode(‘unicode_escape’)
# 2、需求:爬取搜狗指定词条对应的搜索结果页面(简易网页采集器)
# 获取带有请求参数params和headers的get请求的响应报文
import requests

def getSearchResultPage(searchKeyword):
    url = 'https://www.sogou.com/web'
    # 直接访问搜索结果页面,处理url携带的参数,封装到字典中
    param = {
        'query': searchKeyword
    }
    # UA伪装,将对应的User-Agent封装到一个字典中
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
    }
    # 对指定的url发起的请求,对应url是携带参数的,并且请求过程中处理了参数
    response = requests.get(url, params=param, headers=header)
    # response默认使用iso-8859-1编码对消息体进行编码,传送数据给客户端。
    # 指定响应报文的编码格式
    response.encoding = 'utf-8'
    page_text = response.text
    fileName = searchKeyword + '.html'
    with open(fileName, 'w', encoding='utf-8') as file:
        file.write(page_text)
    print('爬虫结束')

if __name__ == '__main__':
    getSearchResultPage("python")
    getSearchResultPage("测试")

输出结果:

 

3、爬取页面局部数据(Aja

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值