前言

今天用google浏览器试着抓了一下包,感觉很有意思,做了一个小demo。

抓包

所谓抓包,按照我的理解,就是获取浏览网站时的各个请求。
通过google浏览器可以进行查看这些包。
如下

下面来介绍一下怎么调出这个界面来。(大佬请忽略)
登录携程网,点击导航栏火车,按一下F12(出现如上图右边部分)然后点击network,network中中对不同的请求进行分类如下

xhr我的理解是请求一些数据,就是里面有我们想要的一些信息,就比如火车票信息等等(当然这个理解还比较浅显)。
上网找了一个博客里面有讲xhr
https://blog.csdn.net/m_s_l/article/details/89460964

js、css、Img、Media,Font就分别对应着js文件、css样式文件、图片文件、媒体文件、字体文件。
Doc我还不是很懂,打开好像对应这该页面的html文件。
WS、Manifest好像很少出现,我也不是很清楚到底是啥。。。

========
然后单击某个链接会出现如下右边的部分,再点击preview会出现这个请求所返回的数据,如下就是我们想要的火车票数据。(这个需要一个一个试,下面的是对应getTransferList这个请求)

再点击Headers会出现请求的头部信息。
如下

在这里,我们可以获取请求的头部数据(对应Request Headers字段)。
还有请求的一些参数(params)(对应下图的Query String Parameters字段)
params中显然departureStation对应起始城市
arrivalStation对应终点城市
departDataStr对应旅行时间

好了google浏览器的操作大概就是这些。下面就需要python登场了,需要用到这些请求的headers数据(就是上图所示的内容的Request Headers了,最前面是“:”的字段在实际请求中貌似可以不用添加)还有params数据(我们可以自己定义)。通过requests.get(url=yoururl,headers=headers,params=params)就可以获取我们想要的数据了。

headers如下

headers = {"accept": "application/json, text/plain, */*","accept-encoding": "gzip, deflate, br","accept-language": "zh-CN,zh;q=0.9","cookie": "_RSG=PU4FwIKVxx9.sBQdraHoLB; _RDG=28f1bbc8914ef92dbc250ea6fa7e8f7399; _RGUID=9efb7d44-ba3c-4799-b572-464d6768bdbe; _ga=GA1.2.1456400253.1543146928; _abtest_userid=e77ce008-59ec-483d-b404-f15f2fcd00a0; MKT_CKID=1584281102684.70ish.yppc; _gcl_aw=GCL.1584281103.EAIaIQobChMIyYL__dKc6AIVxKiWCh2_cAPJEAAYASAAEgLcfPD_BwE; _gcl_dc=GCL.1584281103.EAIaIQobChMIyYL__dKc6AIVxKiWCh2_cAPJEAAYASAAEgLcfPD_BwE; GUID=09031060310697161187; _gac_UA-3748357-1=1.1584282420.EAIaIQobChMIi8qm7Nec6AIVgqqWCh0_KglCEAAYASAAEgLy8fD_BwE; StartCity_Pkg=PkgStartCity=475; __utma=1.1456400253.1543146928.1585987948.1585990496.2; __utmz=1.1585990496.2.2.utmcsr=ctrip.com|utmccn=(referral)|utmcmd=referral|utmcct=/; _RF1=112.243.9.2; Session=SmartLinkCode=U155952&SmartLinkKeyWord=&SmartLinkQuary=&SmartLinkHost=&SmartLinkLanguage=zh; MKT_CKID_LMT=1588528318213; _gid=GA1.2.1622222748.1588528318; MKT_Pagesource=PC; HotelCityID=7split%E9%9D%92%E5%B2%9BsplitQingdaosplit2020-5-4split2020-05-05split2; gad_city=96e43befd48178e35a28c490547b37c1; Union=OUID=index&AllianceID=4897&SID=155952&SourceID=&createtime=1588561884&Expires=1589166683614; _jzqco=%7C%7C%7C%7C1588528318407%7C1.2042095316.1584281102671.1588529040897.1588561883630.1588529040897.1588561883630.undefined.0.0.144.144; __zpspc=9.23.1588561883.1588561883.1%232%7Cwww.baidu.com%7C%7C%7C%7C%23; _gat=1; _bfi=p1%3D108001%26p2%3D0%26v1%3D204%26v2%3D0; appFloatCnt=131; _bfa=1.1543146924604.2g8hwy.1.1588528315406.1588561880984.18.205.10650041414; _bfs=1.3","referer": r"https://trains.ctrip.com/pages/booking/search?ticketType=0&fromCn=%25E5%258C%2597%25E4%25BA%25AC&toCn=%25E6%25BD%258D%25E5%259D%258A&day=2020-05-04&mkt_header=&allianceID=&sid=&ouid=&orderSource=","sec-fetch-dest": "empty","sec-fetch-mode": "cors","sec-fetch-site": "same-origin","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36","x-requested-with": "XMLHttpRequest",
}

emmmmm,有一个不好处就是headers从浏览器复制下来得自己手动添加那些冒号和引号,还有逗号。或者用一下python的正则表达式也是可以的。详见文末。

好现在开始封装请求函数

def getinfo(start,end,time="2020-05-04"):data = {"departureStation": start,"arrivalStation": end,"departDateStr": time}res = requests.get(url="https://trains.ctrip.com/pages/booking/getTransferList",params=data,headers=headers)print(res.text)return res

运行一下该函数

getinfo("上海","潍坊",time="2020-06-08")

得到如下结果

显示出我们想要的2020年6月8号从上海到潍坊的火车票数据。
全部代码如下

import requests
headers = {"accept": "application/json, text/plain, */*","accept-encoding": "gzip, deflate, br","accept-language": "zh-CN,zh;q=0.9","cookie": "_RSG=PU4FwIKVxx9.sBQdraHoLB; _RDG=28f1bbc8914ef92dbc250ea6fa7e8f7399; _RGUID=9efb7d44-ba3c-4799-b572-464d6768bdbe; _ga=GA1.2.1456400253.1543146928; _abtest_userid=e77ce008-59ec-483d-b404-f15f2fcd00a0; MKT_CKID=1584281102684.70ish.yppc; _gcl_aw=GCL.1584281103.EAIaIQobChMIyYL__dKc6AIVxKiWCh2_cAPJEAAYASAAEgLcfPD_BwE; _gcl_dc=GCL.1584281103.EAIaIQobChMIyYL__dKc6AIVxKiWCh2_cAPJEAAYASAAEgLcfPD_BwE; GUID=09031060310697161187; _gac_UA-3748357-1=1.1584282420.EAIaIQobChMIi8qm7Nec6AIVgqqWCh0_KglCEAAYASAAEgLy8fD_BwE; StartCity_Pkg=PkgStartCity=475; __utma=1.1456400253.1543146928.1585987948.1585990496.2; __utmz=1.1585990496.2.2.utmcsr=ctrip.com|utmccn=(referral)|utmcmd=referral|utmcct=/; _RF1=112.243.9.2; Session=SmartLinkCode=U155952&SmartLinkKeyWord=&SmartLinkQuary=&SmartLinkHost=&SmartLinkLanguage=zh; MKT_CKID_LMT=1588528318213; _gid=GA1.2.1622222748.1588528318; MKT_Pagesource=PC; HotelCityID=7split%E9%9D%92%E5%B2%9BsplitQingdaosplit2020-5-4split2020-05-05split2; gad_city=96e43befd48178e35a28c490547b37c1; Union=OUID=index&AllianceID=4897&SID=155952&SourceID=&createtime=1588561884&Expires=1589166683614; _jzqco=%7C%7C%7C%7C1588528318407%7C1.2042095316.1584281102671.1588529040897.1588561883630.1588529040897.1588561883630.undefined.0.0.144.144; __zpspc=9.23.1588561883.1588561883.1%232%7Cwww.baidu.com%7C%7C%7C%7C%23; _gat=1; _bfi=p1%3D108001%26p2%3D0%26v1%3D204%26v2%3D0; appFloatCnt=131; _bfa=1.1543146924604.2g8hwy.1.1588528315406.1588561880984.18.205.10650041414; _bfs=1.3","referer": r"https://trains.ctrip.com/pages/booking/search?ticketType=0&fromCn=%25E5%258C%2597%25E4%25BA%25AC&toCn=%25E6%25BD%258D%25E5%259D%258A&day=2020-05-04&mkt_header=&allianceID=&sid=&ouid=&orderSource=","sec-fetch-dest": "empty","sec-fetch-mode": "cors","sec-fetch-site": "same-origin","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36","x-requested-with": "XMLHttpRequest",
}def getinfo(start,end,time="2020-05-04"):data = {"departureStation": start,"arrivalStation": end,"departDateStr": time}res = requests.get(url="https://trains.ctrip.com/pages/booking/getTransferList",params=data,headers=headers)print(res.text)return res
getinfo("上海","潍坊",time="2020-06-08")

附录:处理headers的代码

#直接复制下来是下面这种的,需要加引号和逗号
headers="""
Accept: text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
"""
#对浏览器复制粘贴下来的headers进行处理
#然后我们复制粘贴打印出来的headers
import re
def getheaders(headers):headers = re.sub(r": ",r"': '",headers)headers = re.sub(r"\n","',\n'",headers)print(headers)
getheaders(headers)

注:网页跳转的时候登陆之类请求有可能会被清除,需要在Network选项勾选上“Preserve log”。

感觉抓包比较有意思,就记录了下来。喜欢的话不要忘记点个赞哦!
本人才疏学浅,难免有说的不对的地方欢迎评论区讨论。

【爬虫】google浏览器+requests获取火车票信息相关推荐

  1. Google登录及获取Calendar信息

    Google登录及获取Calendar信息 firebase方案(实际是一个三方登录集成,由于是google的所以使用Google账户登录以后可以使用google api) firebase官网 使用 ...

  2. 爬虫基础-登陆github获取个人信息

    登陆github获取个人信息 import requests from bs4 import BeautifulSoup##获取github的token github_get = requests.g ...

  3. python爬虫从企查查获取企业信息-手工绕开企查查的登录验证

    想要从企查查爬取企业信息,如果没有登录直接检索,邮箱.电话都被隐藏了: 上面的图片是之前截的图,今天再次检索,好像又可见了: 不过单击查看详情时,还是会被隐藏: 不管怎么说,只要企查查想限制登录,总会 ...

  4. python爬虫-从QQ邮箱获取好友信息并爬取头像

    本篇博客利用python爬虫实现半自动爬取好友头像 和以前一样,先上效果: 以上就是我的好友头像,怎么获取呢? 我采取的方法可能有点低级,首先打开我们的qq邮箱,按F12找见如下的包: 我们需要的好友 ...

  5. python京东注册账号_Python爬虫模拟登录京东获取个人信息

    先上我的代码.参考了上面链接的文章# -*- coding: utf-8 -*- # !/usr/bin/python import os import urllib2 import urllib i ...

  6. 通过浏览器UA获取设备信息

    2019独角兽企业重金招聘Python工程师标准>>> 最近突发奇想,想要通过浏览器的UA信息而得到该设备的信息,比如平台.系统.手机型号等等,本想自己写,但是发现太麻烦了,之后找到 ...

  7. python过京东app图形验证勾股定理_Python爬虫模拟登录京东获取个人信息

    先上我的代码.参考了上面链接的文章 # -*- coding: utf-8 -*- # !/usr/bin/python import os import urllib2 import urllib ...

  8. Python爬虫模拟登录京东获取个人信息

    http://www.xgezhang.com/python_crawler_jingdong.html 先上我的代码.参考了上面链接的文章 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  9. 前端日历添加记事功能_通过添加实验室功能从Google日历中获取更多信息

    前端日历添加记事功能 Recently we took a look at how you can take Gmail further by enabling some of the extra f ...

最新文章

  1. Rancher-创建自己的应用商店教程
  2. python实现tomasulo算法_手写算法-python代码实现KNN
  3. 隐藏SyntaxHighlighter滚动条
  4. 如何让两个安装程序setup共享同一个component—— installing shared files(version:installshield develop8.0)...
  5. 深度 | 伯克利教授Stuart Russell:人工智能基础概念与34个误区
  6. HTTP Status 500 - An exception occurred processing JSP page /common/../left.jsp at line 20
  7. 期待!小米电视5官曝新功能:可准确识别家中每一个人
  8. Java中Comparable和Comparator接口的区别
  9. Webstorm 下的Angular2.0开发之路
  10. spring aop原理_源码解析Spring的AOP原理(一)
  11. 鸿蒙OpenHarmony hi3516开发板,标准系统实现智能门禁
  12. 小行星项目第2部分测试驱动开发
  13. linux下载tar包和rpm包以及镜像的地址分享一下
  14. html tr行内样式左对齐,探索CSS单行文字居中,多行文字居左的实现方式
  15. 用友java开发待遇_【北京用友软件工资】java开发工程师待遇-看准网
  16. 用计算机弹九八k谱子,拼音输出法(计算机).ppt
  17. comsumer配置
  18. 2021辽宁省大学生程序设计竞赛 题解
  19. sql练习 使用储存池
  20. android相机权限xml,Android相机权限检测兼容问题

热门文章

  1. dnf服务器未响应怎么解决方法,DNF未响应的原因分析与解决方法
  2. 访问者用语音命令控制你的网站。
  3. Zabbix客户端的安装过程
  4. Unity自动保存系统
  5. 2019-8-28-WPF-开发
  6. 【Docker实战】使用Docker部署Tomcat
  7. 李斌撞击2019:光芒没有熄灭,避免亡于派系?
  8. burpsuit抓手机模拟器的包
  9. C语言链表的删除操作
  10. 微信小程序-点击按钮,图片重新加载