爬虫教程1

爬虫的概念

  • 模拟浏览器发送请求,获取响应

爬虫的流程

  • url—》发送请求,获取响应—》提取数据—》保存
  • 发送请求,获取响应—》提取url(下一页,详情页)重新请求

爬虫要根据当前url地址对应的响应为准

  • 爬虫只会请求当前这个url,但是不是请求js,
  • 浏览器拿到的内容,我们在浏览器中看到的内容是elements里面的内容
  • elements=url对应的响应+js+css+图片

requests模块如何发送请求

  • resposne = requests.get(url)

requests中解决编解码的方法

  • response.content.decode()
  • response.content.decode(“gbk”)
  • response.text

判断请求否是成功

assert response.status_code==200

url编码

  • https://www.baidu.com/s?ie=UTF-8&wd=%E6%9F%A5%E7%9C%8B%E6%88%91%E7%9A%84%E8%AF%B7%E6%B1%82%E5%A4%B4
  • https://www.baidu.com/s?ie=UTF-8&wd=查看我的请求头
  • 解码工具百度即可

字符串格式化的另一种方式

"查看{}请求头".format("我的")

使用代理ip

  • 准备一堆的ip地址,组成ip池,随机选择一个ip来时用

  • 如何随机选择代理ip,让使用次数较少的ip地址有更大的可能性被用到

    • {“ip”:ip,“times”:0}
    • [{},{},{},{},{}],对这个ip的列表进行排序,按照使用次数进行排序
    • 选择使用次数较少的10个ip,从中随机选择一个
  • 检查ip的可用性

    • 可以使用requests添加超时参数,判断ip地址的质量
    • 在线代理ip质量检测的网站

携带cookie请求

  • 携带一堆cookie进行请求,把cookie组成cookie池

使用requests提供的session类来请求登陆之后的网站的思路

  • 实例化session
  • 先使用session发送请求,登录对网站,把cookie保存在session中
  • 再使用session请求登陆之后才能访问的网站,session能够自动的携带登录成功时保存在其中的cookie,进行请求

不发送post请求,使用cookie获取登录后的页面

  • cookie过期时间很长的网站
  • 在cookie过期之前能够拿到所有的数据,比较麻烦
  • 配合其他程序一起使用,其他程序专门获取cookie,当前程序专门请求页面

字典推导式,列表推到是

cookies="anonymid=j3jxk555-nrn0wh; _r01_=1; _ga=GA1.2.1274811859.1497951251; _de=BF09EE3A28DED52E6B65F6A4705D973F1383380866D39FF5; ln_uact=mr_mao_hacker@163.com; depovince=BJ; jebecookies=54f5d0fd-9299-4bb4-801c-eefa4fd3012b|||||; JSESSIONID=abcI6TfWH4N4t_aWJnvdw; ick_login=4be198ce-1f9c-4eab-971d-48abfda70a50; p=0cbee3304bce1ede82a56e901916d0949; first_login_flag=1; ln_hurl=http://hdn.xnimg.cn/photos/hdn421/20171230/1635/main_JQzq_ae7b0000a8791986.jpg; t=79bdd322e760beae79c0b511b8c92a6b9; societyguester=79bdd322e760beae79c0b511b8c92a6b9; id=327550029; xnsid=2ac9a5d8; loginfrom=syshome; ch_id=10016; wp_fold=0"
cookies = {i.split("=")[0]:i.split("=")[1] for i in cookies.split("; ")}
[self.url_temp.format(i * 50) for i in range(1000)]

获取登录后的页面的三种方式

  • 实例化session,使用session发送post请求,在使用他获取登陆后的页面
  • headers中添加cookie键,值为cookie字符串
  • 在请求方法中添加cookies参数,接收字典形式的cookie。字典形式的cookie中的键是cookie的name对应的值,值是cookie的value对应的值

requests如何获取响应的url地址和请求的url地址,如何发送post请求

  • response.url
  • response.request.url
  • requests.post(url,data={})

如何发送带headers的请求和params的请求

  • requests.get(url,headers={})
  • requests.get(url,params = {})

如何使用代理,正向代理和反向代理的区别

  • requests.get(url,proxies={协议:协议+ip+端口})
  • 正向代理:客户端知道最终服务器的地址
  • 反向代理:客户端不知道最终服务器的地址

模拟登陆的三种方式

  • session

    • 实例化session(session具有的方法和requests一样)
    • session发送请求post请求,对方服务器设置的cookie会保存在session
    • session请求登录后能够访问的页面
  • cookie放在headers中

    • headers = {“Cookie”:“cookie字符串”}
  • cookie转化为字典放在请求方法中

    • requests.get(url,cookies={“name的值”:“values的值”})

寻找登录的post地址

  • 在form表单中寻找action对应的url地址

    • post的数据是input标签中name的值作为键,真正的用户名密码作为值的字典,post的url地址就是action对应的url地址
  • 抓包,寻找登录的url地址

    • 勾选perserve log按钮,防止页面跳转找不到url
    • 寻找post数据,确定参数
      • 参数不会变,直接用,比如密码不是动态加密的时候
      • 参数会变
        • 参数在当前的响应中
        • 通过js生成

定位想要的js

  • 选择会触发js时间的按钮,点击event listener,找到js的位置
  • 通过chrome中的search all file来搜索url中关键字
  • 添加断点的方式来查看js的操作,通过python来进行同样的操作

安装第三方模块

  • pip install retrying
  • 下载源码解码,进入解压后的目录,python setup.py install
  • ***.whl 安装方法 pip install ***.whl

json使用注意点

  • json中的字符串都是双引号引起来的
    • 如果不是双引号
      • eval:能实现简单的字符串和python类型的转化
      • replace:把单引号替换为双引号
  • 往一个文件中写入多个json串,不再是一个json串,不能直接读取
    • 一行写一个json串,按照行来读取
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值