具体问题

在爬取某个网站时遇到了一个奇怪的问题,就是只要是python爬取的数据得到的基本就是那么几种数据,无论我输入的是什么,返回的数据与浏览器得到返回的数据都不一样,这让我很郁闷,百度也找不到想要的答案。直到最后才发现是自己对python不够了解,不是网站问题,是自己的问题。

解决方法

在requests库中,requests.post()方法中构造参数data时,data里面非ASCII字符就会进行编码。而构造消息请求头headers时,headers里面的非ASCII字符不会自动的进行编码。也就是如果你爬虫的请求消息头和请求参数都与输入有关并且是非ASCII字符的话你需要用parse.quote()方法进行编码,headers用编码后的输入值,否则执行会报错。data直接使用输入值,否则二次编码会改变你的请求值导致爬取的数据与浏览器中得到的数据不一致。

示例代码

import requests
from urllib import parsebegin_put = input("输入:")
after_put = parse.quote(begin_put)headers = {"Host": "aaa.net","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0","Accept": "application/json, text/javascript, */*; q=0.01","Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2","Accept-Encoding": "gzip, deflate","Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","X-Requested-With": "XMLHttpRequest","Connection": "close","Referer": "http://aaa.net/?name=" + after_put + "&type=netease"
}begin_data = {"flag":"begin","input":begin_put
}
after_data = {"flag":"after","input":after_put
}r = requests.post("http://httpbin.org/post",data=begin_data,headers=headers)
req = requests.post("http://httpbin.org/post",data=after_data,headers=headers)

利用抓包工具可以看到第二次请求(也就是flag值为after的)里的input值进行了二次编码。%对应的编码是%25

python爬虫爬取的数据与浏览器获取的数据不一样 爬虫爬取到的数据一直不变相关推荐

  1. Python爬虫入门3:使用google浏览器获取网站访问的http信息

    ☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一.开启开发者工具 为了简单处理,本次介绍的内容是基于网站已经登录的情况下去获取网页访问的 ...

  2. bootstraptable获取所有数据_一键获取oracle用户下所有表的表名与其数据量

    概述 作为DBA,对数据库中表段.索引段之类的数量,大概的级别是需要有个大致了解的,今天主要分享一个存储过程,可以很实用的获取到oracle用户下所有表的表名与其数据量. 查询当前用户名下所有表 se ...

  3. 投影坐标系的shp数据,如何获取到它地理坐标系下的经纬度坐标

    投影坐标系的shp数据,如何获取到它地理坐标系下的经纬度 可以看见,数据的坐标,应该是投影后37度带的数据 点开图层属性来看,这个shp图层的投影坐标系是 CGCS2000_3_Degree_GK_Z ...

  4. python动态页面元素爬取_Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...

    由于主流网站都使用JavaScript展示网页内容,和前面简单抓取静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,而是在HTML源码位置放上一段JavaScrip ...

  5. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过浏览器审查元素解析真实网页地址...

    由于主流网站都使用JavaScript展示网页内容,和前面简单抓取静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,而是在HTML源码位置放上一段JavaScrip ...

  6. 数据分析与爬虫实战视频——学习笔记(一)(python基础、urllib、超时设置、自动模拟HTTP请求、异常处理、浏览器伪装、代理服务器、新闻爬虫、淘宝登陆和图片爬取)

    未经允许,请勿转载. 连载未完成状态 网址: [数据挖掘]2019年最新python3 数据分析与爬虫实战_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilibili ...

  7. 【python】实验2项目2:使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(陈奕迅)

    请使用爬虫Selenium模拟浏览器获取爬取QQ音乐中你喜欢的某位歌手(可以是任意歌手)最受欢迎的前5首歌曲的歌词.流派.歌曲发行时间.评论条数.评论时间.评论点赞次数.评论内容具体(每一首歌的评论& ...

  8. Python 爬虫 之 爬取古代的诗歌,并保存本地(这里以爬取李白的所有诗歌为例)(以备作为AI写诗的训练数据)

    Python 爬虫 之 爬取古代的诗歌,并保存本地(这里以爬取李白的所有诗歌为例)(以备作为AI写诗的训练数据) 目录

  9. python爬虫可以爬取哪些有用的东西_有哪些网站用爬虫爬取能得到很有价值的数据?...

    有哪些网站用爬虫爬取能得到很有价值的数据? 题主是个web程序员,最近想转去做数据分析,先练习的爬虫(python),各种爬取技巧以及多网站爬取等已经掌握,但发现转方向最无奈的是方向(要抓什么数据来干 ...

最新文章

  1. .sh是什么语言_shell的重生历史:从sh到bash
  2. jsp与java_JSP与JavaBeans
  3. 一次DB2数据库连接失败(SQLSTATE=08001)的解决方法
  4. python读取文件r_python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)
  5. Flask爱家租房--订单(下订单)
  6. python中可以使用变量来引用函数吗_如何在python语言中使用函数变量并调用函数...
  7. 好用的一些 git 命令
  8. 鸿蒙霸榜 GitHub,从最初的 Plan B 到“取代 Android”?
  9. es6 TypedArray视图
  10. Gradle Guide
  11. 8926平台boot过程分析
  12. 如何快速计算出三相电流的数值呢
  13. 电脑老是显示断开资产管理服务器,史上最强开机维护通道2016年0825重大功能更新(网络版、电脑资产管理、分层桌面秀)...
  14. Python采集《雪中》弹幕做词云图可视化分析,看看它为何高开低走
  15. python 技巧总结_python技巧汇总
  16. 能否在虚拟平台里构建真实的生活体验?
  17. SpringSecurity中文文档—Authentication— Reading Username/Password
  18. php redis 删除key 通配符,php redis 批量删除keys的方法
  19. Cocos2D-x 入门(1)
  20. java远程代码注入_Java RMI远程反序列化任意类及远程代码执行解析(CVE-2017-3241 )...

热门文章

  1. vb如何调用计算机日历,VB日历代码.doc
  2. C++PrimerPlus 第六章 分支语句和逻辑运算符(复习题)
  3. C#关于导出excel的方法
  4. QT日历 QCalendarWidget
  5. 如何在html网页里获取 mav.addObject(message,登录名或密码错误,请重新输入)的message
  6. 最健脾养胃的8种食物
  7. 软件测试有效性指标,评价软件测试的有效性
  8. mysql导入txt_mysql怎么导入txt文件?
  9. ERROR 1819 (HY000) Your password does not satisfy the current policy requirements
  10. Python错误集锦:pandas绘制多个子图时报错:AttributeError: ‘list’ object has no attribute ‘get_figure’