前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

以下文章来源于肥宅与画家 ,作者AntzUhl

我们编写网络爬虫最主要的目的是爬取想要的数据,通过爬虫去自动完成我们想在网站中做的一些事情。

从今天开始我会从基础开始讲解如何通过网络爬虫去完成你想要做的事。先来看一段简单的代码。

首先是import requests来导入网络请求相关的包,然后定义一个字符串url也就是目标网页,之后我们就要用导入的requests包来请求这个网页的内容。

这里用了requests.get(url),这个get并不是拿取的那个get,而是一种关于网络请求的方法。网络请求的方法有很多,最常见的有get,post,其它如put,delete你几乎不会见到。requests.get(url)就是向url这个网页发送get请求(request),然后会返回一个结果,也就是这次请求的响应信息。

响应信息中分为响应头和响应内容。

响应头就是你这次访问是不是成功了,返回给你的是什么类型的数据,还有很多一些。

响应内容中就是你获得的网页源码了。

好了,这样你就算是入门Python爬虫了,但是还是有很多问题。

1. get和post请求有什么区别?

2. 为什么有些网页我爬取到了,里面却没有我想要的数据?

3. 为什么有些网站我爬下来的内容和我真实看到的网站内容不一样?

get和post的区别主要在于参数的位置,比如说有一个需要登录用户的网站,当我们点击登录之后,账号密码应该放在哪里。

get请求最直观的体现就是请求的参数就放在了URL中。

比如说你百度Python这个关键字,就可以发现它的URL如下:

https://www.baidu.com/s?wd=Python&rsv_spt=1

这里面的dw=Python就是参数之一了,get请求的参数用?开始,用&分隔。

在post请求中,参数会放在请求体内。

比如说下面是我登录W3C网站时的请求,可以看到Request Method是post方式。

在请求的下面还有我们发送的登录信息,里面就是加密过后的账号密码,发送给对方服务器来检验的。

另一个问题是我们的爬虫有时候可能爬下来一个网站,在查看里面数据的时候会发现,爬下来的是目标网页,但是里面我们想要的数据却没有。

这个问题大多数发生在目标数据是那些列表型的网页,比如说前几天班上一个同学问了我一个问题,他在爬携程的航班信息时,爬下来的网页除了获得不了航班的信息,其他地方都可以拿到。

网页地址:

https://flights.ctrip.com/itinerary/oneway/cgq-bjs?date=2019-09-14

如下图:

这是一个很常见的问题,因为他requests.get的时候,是去get的上面我放的那个URL地址,但是这个网页虽然是这个地址,但是它里面的数据却不是这个地址。

听起来很像很难,但是从携程这个网站的设计人的角度来说,加载的这部分航班列表信息可能很庞大,如果你是直接放在这个网页里面,我们用户打开这个网页可能需要很久,以至于认为网页挂了然后关闭,所以设计者在这个URL请求中只放了主体框架,让用户很快进入网页中,而主要的航班数据则是之后再加载,这样用户就不会因为等待很长时间而退出了。

说到底怎么做是为了用户体验,那么我们应该怎么解决这个问题呢?如果你学过前端,你应该知道Ajax异步请求,不知道也没事,毕竟我们这里不是在说前端技术。我们只需要知道我们最开始请求的https://flights.ctrip.com/itinerary/oneway/cgq-bjs?date=2019-09-14 这个网页中有一段js脚本,在这个网页请求到之后会去执行,而这段脚本的目的就是去请求我们要爬的航班信息。

这时候我们可以打开浏览器的控制台,推荐使用谷歌或者火狐浏览器,按F进入坦克,不,按F12进入浏览器控制台,然后点击NetWork。

在这里我们就可以看到这个网页中发生的所有网络请求和响应了。

在这里面我们可以找到请求航班信息的其实是https://flights.ctrip.com/itinerary/api/12808/products 这个URL。

最后一个问题就是为什么有些网站我爬下来的内容和我真实看到的网站内容不一样?

这个的主要原因是,你的爬虫没有登录。就像我们平常浏览网页,有些信息需要登录才能访问,爬虫也是如此。这就涉及到了一个很重要的概念,我们的平常观看网页是基于Http请求的,而Http是一种无状态的请求。

什么是无状态?你可以理解为它不认人,也就是说你的请求到了对方服务器那里,对方服务器是不知道你到底是谁。

既然如此,我们登录之后为什么还可以长时间继续访问这个网页呢?这是因为Http虽然是无状态的,但是对方服务器却给我们安排了身份证,也就是cookie。在我们第一次进入这个网页时,如果之前没有访问过,服务器就会给我们一个cookie,之后我们在这个网页上的任何请求操作,都要把cookie放进去。这样服务器就可以根据cookie来辨识我们是谁了。

比如知乎里面就可以找到相关的cookie。

对于这类网站,我们直接从浏览器中拿到已有的cookie放进代码中使用,requests.get(url,cookies="aidnwinfawinf"),也可以让爬虫去模拟登录这个网站来拿到cookie。

python如何解析网页_Python爬虫入门第一课:如何解析网页相关推荐

  1. python爬虫解析数据_Python爬虫入门知识:解析数据篇

    首先,让我们回顾一下入门Python爬虫的四个步骤吧: 而解析数据,其用途就是在爬虫过程中将服务器返回的HTML源代码转换为我们能读懂的格式.那么,接下来就正式进入到解析数据篇的内容啦. Part 1 ...

  2. python request url 转义_Python爬虫入门笔记

    来源:blog.csdn.net/weixin_44864260 爬虫四大步骤: 1.获取页面源代码 2.获取标签 3.正则表达式匹配 4.保存数据 1. 获取页面源代码 5个小步骤: 1.伪装成浏览 ...

  3. Python爬虫入门第一课:如何解析网页

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于肥宅与画家 ,作者AntzUhl 我们编写网络爬虫最主要的目 ...

  4. python编程理论篇_Python爬虫入门实战之猫眼电影数据抓取(理论篇)

    前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...

  5. python spider怎么用_python爬虫入门(七)Scrapy框架之Spider类

    Spider类 Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作 ...

  6. python爬取方式_Python 爬虫入门(三)—— 寻找合适的爬取策略

    写爬虫之前,首先要明确爬取的数据.然后,思考从哪些地方可以获取这些数据.下面以一个实际案例来说明,怎么寻找一个好的爬虫策略.(代码仅供学习交流,切勿用作商业或其他有害行为) 1).方式一:直接爬取网站 ...

  7. python抓包教程_Python爬虫入门技能:教你通过 Fiddler 进行手机抓包!

    哟哟哟~ hi起来 everybody image 今天要说说怎么在我们的手机抓包 学习Python中有不明白推荐加入交流群 号:864573496群里有志同道合的小伙伴 ,互帮互助,群里有不错的视频 ...

  8. python二手房使用教程_Python爬虫入门教程03:二手房数据爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 基本开发环境Python 3.6 Pycharm 相关模块的使用requests parse ...

  9. python访问多个网页_Python 爬虫 2 爬取多页网页

    本文内容: Requests.get 爬取多个页码的网页 例:爬取极客学院课程列表 爬虫步骤 打开目标网页,先查看网页源代码 get网页源码 找到想要的内容,找到规律,用正则表达式匹配,存储结果 Re ...

最新文章

  1. 通过关闭swap来提高win7运行速度
  2. php 安全基础 第一章简介 原则
  3. bzoj 1207: [HNOI2004]打鼹鼠
  4. linux 下进入oracle,linux 下的oracle怎么启动
  5. PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection
  6. IntelliJ IDEA(一、下载,安装与激活)
  7. emacs python ide_Emacs Python IDE win7 x64
  8. 怎样进行软件测试结果分析,具体实例教你如何做LoadRunner结果分析
  9. 德国数字化进展迅速,远程发送诉讼仅需6小时
  10. 【网络信息安全】Web 安全
  11. 推荐几个代码自动生成器,神器!!!
  12. Linux系统批量压缩图片工具
  13. 57、弱电网络管理入门与基础技术
  14. Python暴力破解ZIP文件密码
  15. 如何批量导出QQ空间相册到电脑中
  16. vs安卓开发发布_开始取代安卓系统?华为Mate系列新产品曝光:运行鸿蒙操作系统!...
  17. 用Unity实现Flat Shading
  18. Android P指示灯调节代码逻辑
  19. 应用程序“Parallels Desktop“无法打开MAC电脑打不开
  20. java8 两个时间比较

热门文章

  1. 将项目部署至云服务器的详细过程 以community项目为例
  2. CSS 霓虹灯效果 (二)
  3. lambda表达式和方法引用
  4. 数字摘要和数字签名等概念
  5. 这一千个Python库,总有你想要的!
  6. 两名研究生的午餐时间
  7. Ants (POJNo.1852)--数据结构与算法刷题记录
  8. 2021年高压电工证考试题库,高压电工试题解析
  9. 数据分析之“设立标准、判断分类”
  10. 【SAM套路/AC自动机+主席树】CF547E Mike and Friends