前言

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

以下文章来源于肥宅与画家 ,作者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爬虫入门第一课:如何解析网页相关推荐

  1. python如何解析网页_Python爬虫入门第一课:如何解析网页

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

  2. python编程入门第一课_python入门前的第一课 python怎样入门

    人工智能时代的到来,很多文章说这么一句:"不会python,就不要说自己是程序员",这说的有点夸张了,但确实觉得目前python这个语言值得学习,而且会python是高薪程序员的必 ...

  3. 【Python爬虫】第一课 Python爬虫环境与爬虫简介

    1.1 认识爬虫 网络爬虫作为收集互联网数据的一种常用工具,近年来随着互联网的发展而快速崛起.使用网络爬虫爬取网络数据首先需要了解网络爬虫的概念和主要分类,各类爬虫的系统结构,运作方式,常用的爬取策略 ...

  4. python爬虫入门教程:爬取网页图片

    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的.而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程: 准备工作 语言:python IDE:py ...

  5. Python爬虫入门:爬取某个网页的小说内容

    导入必要的包 import requests import re 要爬的网页 url = 'http://www.shujy.com/5200/244309/' 模拟浏览器发送http请求 respo ...

  6. python编程入门第一课教案_python编程从入门到实践 第一课:输入输出

    #print()函数使用 messger="hello python world!" print(messger) hello python world! 1.使用"#& ...

  7. python爬虫入门教程(三):淘女郎爬虫 ( 接口解析 | 图片下载 )

    2019/10/28更新 网站已改版,代码已失效(其实早就失效了,但我懒得改...)此博文仅供做思路上的参考 代码使用python2编写,因已失效,就未改写成python3 爬虫入门系列教程: pyt ...

  8. Python爬虫入门之爬虫解析提取数据的四种方法

    本文主要介绍了Python爬虫入门之爬虫解析提取数据的四种方法,通过具体的内容向大家展现,希望对大家Python爬虫的学习有所帮助. 基础爬虫的固定模式 笔者这里所谈的基础爬虫,指的是不需要处理像异步 ...

  9. Python爬虫入门之淘宝JS逆向解析请求参数Sign加密(一)

    关于JS逆向,相信这是很多小伙伴学习爬虫的一个门槛之一,如果你是初学者入门,开发一款爬虫,要以思路为主,代码是其次的 这里所说的思路指两个方面,一,分析观察目标站点思路,二,代码开发思路,二者缺一不可 ...

最新文章

  1. Vue 组件库 HeyUI@1.16.0 更新日志
  2. Ubuntu 16.04下Redis Cluster集群搭建(官方原始方案)
  3. 在PyTorch上用Keras,分布式训练开箱即用,告别没完没了的Debug
  4. 什么叫大地高_续航8折不存在,北汽新能源EX5实力演绎什么叫高续航SUV!
  5. 搜索二维矩阵 II—leetcode240
  6. ORACLE ROLLUP CUBE
  7. [html] 后缀.html和.htm有什么区别?
  8. java8新特性(6)— 日期与时间
  9. 初学者Git和GitHub简介(教程)
  10. 安卓学习笔记05:Activity概述
  11. hibernate sql 执行两次_使用 Hibernate 和 MySQL 需要知道的五件事
  12. 视频帧率对人眼主观感受的影响 2
  13. CPDA项目数据分析师和CDA数据分析师有什么区别?
  14. 使用Python脚本将酷狗音乐的缓存文件修改为可播放
  15. 开源VOSK引擎免费语音转文字部署
  16. 一个html文档必须有,创建一个完整的HTML文档总结
  17. JavaScrpit+Html实现日期时间启动、停止操作(应用场景:计时器、秒表)
  18. JetPack Compose之Modifier修饰符
  19. 陪你云sdk用户指南
  20. 软件测试实验1 — Junit 安装与 triangle problem 的测试

热门文章

  1. Packet Tracer 思科模拟器入门教程 之七 利用三层交换机实现VLAN间路由
  2. 流量/访客数/曝光量/浏览量/pv/uv
  3. 暴力解决Centos6YUM下Loaded plugins: fastestmirror Determining fastest mirror和Could not retrieve mirro
  4. python360安全浏览器_使用python3.7 的pycharm selenium自动化测试中启动360浏览器、360极速浏览器的方法...
  5. lammps案例:水分子在石墨烯狭缝中流动的案例代码
  6. VB 程序大揭秘(转载)用VB的不得不看的好东西!
  7. 【深度学习】一个用于styleGAN图像处理的编码器
  8. Redis学习之publish命令
  9. 1341:【例题】一笔画问题
  10. 四川大学计算机学院硕士毕业要求,四川大学计算机学院(软件学院)2020年非全日制硕士研究生接受调剂生的通知...