python爬虫

本文详细介绍了Python的request模块,包括如何使用request模块进行浏览器模拟请求,以及实战中如何爬取搜狗首页、破解百度翻译和爬取豆瓣电影等。同时,文章还涉及了数据解析的部分,讲解了xpath的使用,并给出了58二手房的xpath实战例子。此外,提到了动态加载数据的处理,如在爬取国家药品监督管理总局化妆品生产许可证数据时遇到的ajax动态请求问题。最后,简要介绍了selenium在处理动态加载数据时的应用。
摘要由CSDN通过智能技术生成

request模块:模拟浏览器请求

如何使用request模块(request模块的编码流程):

  • 指定url
  • 发起请求
  • 获取响应数据(源码)
  • 持久化存储

实战

爬取搜狗首页的页面数据

  • UA检测
  • UA伪装

在这里插入图片描述

  • 简易网页搜索器

    代码

import requests
    #UA检测:User-Agent(请求载体的身份标识),
    # 门户网站的服务器会检测对应请求的载体身份标识,
    # 如果检测到请求的载体身份标识为某一款浏览器,那么说明该请求是个正常请求
    # 但是如果检测到请求的载体身份标识不是基于某一款浏览器的
    # 则表示该请求为不正常的请求(是基于爬虫载体的请求),服务器端会拒绝该次请求

    #UA检测的反扒策略是UA伪装,让爬虫对应的请求载体身份标识伪装成某一款浏览器

if __name__ == "__main__":
    #UA伪装:将对应的User-Agent封装到一个字典中
    headers = {
   
        'User-Agent' :'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    }
    #1.指定url
    url = 'https://www.baidu.com/s'
    #2.处理url携带的参数:封装到字典中
    kw = input('enter a word:')
    param = {
   
        'wd':kw
    }
    #2.发起get请求
    #对指定的url发起的请求对应的url时携带参数的,并且请求过程中处理了参数
    response = requests.get(url=url,params=param,headers=headers)
    page_text = response.text
    fileName = kw + '.html'
    with open(fileName,'w',encoding='utf-8') as fp:
        fp.write(page_text)
    print(fileName,'保存成功!!!!')

结果

在这里插入图片描述


破解百度翻译

  • post请求(携带了参数)
  • 响应数据是一组json数据串

ajax进行页面局部刷新,页面自动进行刷新,XHR对应ajax请求的数据包

找post请求的参数,参数是dog,说明是ajax请求的数据包

在这里插入图片描述

第一个post请求的数据包

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

响应数据在这里插入图片描述

代码:
import json

import requests
if __name__ == '__main__':
    #1.从ajax数据包中找post方法的url
    post_url = 'https://fanyi.baidu.com/sug'
    #2.进行UA伪装
    headers={
   
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    }
    #3.post请求参数处理(同get请求一致)
    word = input('enter a word')
    data = {
   
        'kw':word
    }
    #4.请求发送
    response = requests.post(url=post_url,data=data,headers=headers)
    #5.获取响应数据:json()方法返回的是obj,我们要转化成字典类型的(如果确认响应数据是json类型的,才可以使用json(),如何确认?查看response headers的content-type是不是application/json)
    dic_obj = response.json()
    print(dic_obj)

    #持久化存储
    fileName = word + '.json'
    fp = open(fileName,'w',encoding='utf-8')
    #将字典对象转化为json数据,存到文件fp里
    json.dump(dic_obj,fp=fp,ensure_ascii=False)
    print('over!!!')

结果:

在这里插入图片描述

在这里插入图片描述


爬取豆瓣电影

爬取豆瓣喜剧电影排行榜名称,导演,上映时间

当滚轮向下划到底,页面自动加载刷新,这是一个ajax动态请求

在这里插入图片描述

在这里插入图片描述

观察响应数据response,里边的内容正是我们请求到的新一批的电影详情数据

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

代码:

动态地处理start和limit这两个数据可以获取不同的响应数据

import requests
import json

if __name__ == '__main__':
    url='https://movie.douban.com/j/chart/top_list'
    param = {
   
        'type': '24',
        'interval_id': '100:90',
        'action':'',
        'start': '0', #从库中的第20部电影开始爬取
        'limit': '20'  #一次请求取出的个数
    }
    headers = {
   
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
    }
    response = requests.get(url=url,params=param,headers=headers)
    list_data = response.json()
    fp = open('./douban.json','w',encoding='utf-8')
    json.dump(list_data,fp=fp,ensure_ascii=False)
    print(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值