spider_day06

Day05回顾

动态加载网站数据抓取

1、F12打开控制台,页面动作抓取网络数据包
2、抓取json文件URL地址
# 控制台中 XHR :异步加载的数据包
# XHR -> Query String(查询参数)

有道翻译流程梳理

1. 打开首页
2. 准备抓包: F12开启控制台
3. 寻找地址
   页面中输入翻译单词,控制台中抓取到网络数据包,查找并分析返回翻译数据的地址
4. 发现规律
   找到返回具体数据的地址,在页面中多输入几个单词,找到对应URL地址,分析对比 Network - All(或者XHR) - Form Data,发现对应的规律
5. 寻找JS文件
   右上角 ... -> Search -> 搜索关键字 -> 单击 -> 跳转到Sources,左下角格式化符号{
   }
6、查看JS代码
   搜索关键字,找到相关加密方法,分析并用python实现
7、断点调试
8、完善程序

cookie模拟登陆

1、适用网站类型: 爬取网站页面时需要登录后才能访问,否则获取不到页面的实际响应数据
2、方法1(利用cookie)
   1、先登录成功1,获取到携带登陆信息的Cookie(处理headers) 
   2、利用处理的headers向URL地址发请求
3、方法2(利用session会话保持)
   1、登陆,找到POST地址: form -> action对应地址
   2、定义字典,创建session实例发送请求
      # 字典key :<input>标签中name的值(email,password)
      # post_data = {'email':'','password':''}

Day06笔记

cookie模拟登录

  • 适用网站及场景
抓取需要登录才能访问的页面
  • 方法一
1、先登录成功1,获取到携带登陆信息的Cookie
   F12打开控制台,在页面输入用户名、密码,登录成功,找到/home(一般在抓到地址的上面)
2、携带着cookie发请求
   ** Cookie
   ** Referer(,代表你从哪里转过来的)
   ** User-Agent
import requests
from lxml import etree

# url为需要登录才能正常访问的地址
url = 'http://www.renren.com/969255813/profile'
# headers中的cookie为登录成功后抓取到的cookie
headers = {
   
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
    "Accept-Encoding": "gzip, deflate",
    "Accept-Language": "zh-CN,zh;q=0.9",
    "Connection": "keep-alive",
    # 此处注意cookie,要自己抓取
    "Cookie": "",
    "Host": "www.renren.com",
    "Referer": "http://www.renren.com/SysHome.do",
    "Upgrade-Insecure-Requests": "1",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
}

html = requests.get(url,headers=headers).text
# 解析
parse_html = etree.HTML(html)
result = parse_html.xpath('//*[@id="operate_area"]/div[1]/ul/li[1]/span/text()')[0].strip()
# result:就读于中央戏剧学院
print(result)
  • 方法二
  1. 知识点
利用requests模块中的session会话保持功能
  1. session会话使用流程
1、实例化session对象
   session = requests.session()
2、让session对象发送get或者post请求
   res = session.get(url,headers=headers)
  1. 具体步骤
1、寻找登录时POST的地址
   查看网页源码,查看form,找action对应的地址: http://www.renren.com/PLogin.do

2、发送用户名和密码信息到POST的地址
   * 用户名和密码信息以什么方式发送? -- 字典
     键 :<input>标签中name的值(email,password)
     值 :真实的用户名和密码
     post_data = {
   'email':'','password':''}
  1. 程序实现
整体思路
1、先POST: 把用户名和密码信息POST到某个地址中(一般是form表单中action的地址)
2、再GET:  正常请求去获取页面信息
import requests
from lxml import etree

# 定义常用变量
post_url = 'http://www.renren.com/PLogin.do'
post_data = {
   
  'email' : 'xxxxxx',
  'password' : 'xxxxxx'
}
headers = {
   
  'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36',
  'Referer' : 'http://www.renren.com/SysHome.do'
}

# 实例化session会话保持对象
session = requests.session()
# 先POST,把用户名和密码信息POST到一个地址
session.post(post_url,data=post_data,headers=headers)

# 再get个人主页
url = 'http://www.renren.com/970294164/profile'
html = session.get(url,headers=headers).text

parse_html = etree.HTML(html)
result = parse_html.xpath('//*[@id="operate_area"]/div[1]/ul/li[1]/span/text()')[0].strip()
print(result)

百度翻译破解案例

目标

破解百度翻译接口,抓取翻译结果数据

实现步骤

  • 1、F12抓包,找到json的地址,观察查询参数

    1、POST地址: https://fanyi.baidu.com/v2transapi
    2、Form表单数据(多次抓取在变的字段)
       from: zh
       to: en
       sign: 54706.276099  #这个是如何生成的?
       token: a927248ae7146c842bb4a94457ca35ee # 基本固定,但也想办法获取
    
  • 2、抓取相关JS文件

    右上角 - 搜索 - sign: - 找到具体JS文件(index_c8a141d.js) - 格式化输出
    

3、在JS中寻找sign的生成代码

1、在格式化输出的JS代码中搜索: sign: 找到如下JS代码:sign: m(a),
2、通过设置断点,找到m(a)函数的位置,即生成sign的具体函数
   # 1. a 为要翻译的单词
   # 2. 鼠标移动到 m(a) 位置处,点击可进入具体m(a)函数代码块

4、生成sign的m(a)函数具体代码如下(在一个大的define中)

function a(r) {
   
        if (Array.isArray(r)) {
   
            for (var o = 0, t = Array(r.length); o < r.length; o++)
                t[o] = r[o];
            return t
        }
        return Array.from(r)
    }
function n(r, o) {
   
    for (var t = 0; t < o.length - 2; t += 3) {
   
        var a = o.charAt
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值