文章更新于:2020-02-18

注:python 爬虫当然要安装 python,如何安装参见:python 的安装使用和基本语法

一、什么是网络爬虫

网络爬虫就是用代码模拟人类去访问网站以获取我们想要信息。由于代码模拟的速度和效率很高,所以可以批量和动态获取我们想要的信息。比如抢票软件就是一直用代码访问12306网站获取余票信息,一有余票立马使用代码进行模拟购买。

二、网络爬虫的分类

  1. 通用网络爬虫。又称全网爬虫,爬行对象从一些种子URL扩充至整个Web,主要为门户站点、搜索引擎和大型Web服务提供商采集数据。
  2. 聚焦网络爬虫。是指有选择性的爬行哪些与预定主题相关页面的网络爬虫。
  3. 增量式网络爬虫。是指对已下载网页采取增量式更新的爬虫,只爬行发生更新的网页,减少了数据下载量。
  4. 深层网络爬虫。深层网页是指只有用户提交一些关键词才能获取的Web页面,隐藏在搜索表单后的。

三、网络爬虫的架构

  1. URL管理器:放置重复抓取和循环抓取。
  2. 网页下载器:用于下载网页,爬虫的核心部分之一。
  3. 网页解析器:用于提取网页中自己想要的数据,爬虫的另一个核心部分。
  4. 输出管理器:用于保存信息,将数据输出到文件或数据库。

四、爬虫如何工作

1、举个爬虫的例子,我们访问百度官网

import requests				//导入requests包
#这个包需要提前安装,在cmd 里面进入 python 安装路径的 Scripts 目录输入 pip install lxml 进行安装
from lxml import etree //导入etree包 url = "https://www.baidu.com/"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'} r = requests.get(url,headers=headers);
r.encoding = 'utf-8'
selector = etree.HTML(r.text) news_text = selector.xpath('//*[@id="u1"]/a[1]/text()')[0]
news_url = selector.xpath('//*[@id="u1"]/a[1]/@href')[0]
print(news_url)
print(news_text)

说明如下

行数 说明
第1行 导入requests包,用于使用get访问命令
第2行 导入etree包,用于使用xpath命令以找到自己想要的元素
第4行 设置我们想要访问的url
第5行 设置访问头部信息headers,用于模拟浏览器访问
第7行 执行访问,并将获取的数据刚到r对象中
第8行 将r对象的编码方式设置为utf-8
第9行 用etree解析r对象数据并放到selector中
第11行 获取从根目录下找到id='u1’属性下的a标签的text内容
第12行 获取从根目录下找到id='u1’属性下的a标签的href内容
第13行 输出第11行获取的数据
第14行 输出第13行获取的数据

结果如下

http://news.baidu.com
新闻

五、如何定位元素



在HTML页面上右键、检查即可定位到HTML代码相应位置。



同时,在代码上右键、Copy、Copy XPath即可复制XPath地址。

初始化HTML源码

XPath即为XML路径语言,它是一种用于确定XML文档中某部分位置的语言。

如在代码中使用此功能需要导入lxml中的etree包

from lxml import etree

然后使用HTML源码初始化etree,并赋值给一个对象以保存

selector = etree.HTML(r.text)

这样我们就得到了一个名字叫做selector的Element对象,这时我们可以对这个Element对象进行XPath筛选,系统会返回一个筛选的结果列表。

使用标签顺序定位

比如我们要查找第一个div下的第二个ul下的a标签

all_a = selector.xpath('//div[1]/ul[2]/a')

//表示从根节点开始查找,然后找到第二个ul下的所有a标签。

==注意:==这里的数字是从1开始的,而不是从0开始的。

用属性定位

而同时,我们也可以通过属性查找元素。

li_good = selector.xpath('//ul/li[@[class="good"]')

上述代码可以找到ul下所有class属性为good的li标签。

用唯一属性全局定位

当然,如果class属性唯一,也可以直接中根目录开始查找。

li_good = selector.xpath('//*[@[class="good"]')

上述代码的意思是:从根目录下开始查找class属性为good的所有标签。*代表任意的标签。

提取属性值

li_good_text = selector.xpath('//*[@[class="good"]/a/@href')

这里通过@href语法形式提取到了a标签的属性值。

六、一些注意事项

import requests

response = requests.get(“https://www.baidu.com”)

这里可以通过

response.encoding

来查看返回值response的编码

通过

response.encoding = “utf-8”

来修改返回值response的编码

还可以通过

response.headers

来查看返回值response的头部

而请求头部则可以通过

response.request.headers

来查看

列表如下:

代码 说明
response.encoding 查看返回值的编码
response.encoding = “utf-8” 修改返回值的编码
response.headers 查看返回头部
response.request.headers 查看请求头部
response.status_code 查看返回状态码
response.history 查看重定向

1、添加参数

payloag = {‘q’:‘pythoh’,‘cat’:‘10001’}

r = requests.get(url,headers=headers,params=payload)

会 python 的一定会爬虫吗,来看看的更多相关文章

  1. Python初学者之网络爬虫(二)

    声明:本文内容和涉及到的代码仅限于个人学习,任何人不得作为商业用途.转载请附上此文章地址 本篇文章Python初学者之网络爬虫的继续,最新代码已提交到https://github.com/octans ...

  2. 【Python】:简单爬虫作业

    使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...

  3. 使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道

    使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道 使用python/casperjs编写终极爬虫-客户端App的抓取

  4. [Python学习] 简单网络爬虫抓取博客文章及思想介绍

            前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...

  5. 洗礼灵魂,修炼python(69)--爬虫篇—番外篇之feedparser模块

    feedparser模块 1.简介 feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom .使用它我们可从任何 RSS 或 Atom 订阅源得到标题.链接和文章的 ...

  6. 洗礼灵魂,修炼python(50)--爬虫篇—基础认识

    爬虫 1.什么是爬虫 爬虫就是昆虫一类的其中一个爬行物种,擅长爬行. 哈哈,开玩笑,在编程里,爬虫其实全名叫网络爬虫,网络爬虫,又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者 ...

  7. 使用Python + Selenium打造浏览器爬虫

    Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操 ...

  8. Python 利用Python编写简单网络爬虫实例3

    利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...

  9. Python 利用Python编写简单网络爬虫实例2

    利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...

随机推荐

  1. 吃透这份pdf,面试阿里、腾讯、百度等一线大厂,顺利拿下心仪offer!

    前言 最近一位年前裸辞的朋友来找我诉苦,说因为疫情原因现在都在家吃老本.本想着年后就来找工作的,但是现在这个情况也不好找,而且很多公司也随着这次疫情面临着资金紧缺导致裁员严重的甚至倒闭,导致很多人失业 ...

  2. 你会无聊到把Administrator用户禁用,并且自己创建的用户搞到消失掉还有Administrator用户被禁吗。。。。。

    2020年3月17日20:07:00 如文章标题哈,就是这么任性,无奈 事件起因:因为要部署项目,并且需要将线上的Oracle数据库导入到本地Oracle数据库中突然发现使用 sqlplus 连接数据 ...

  3. .Net Core 实现图片验证码

    记录自己的学习,参考了网上各位大佬的技术,往往在登录的时候需要使用到验证码来进行简单的一个校验,这边使用在.net core上进行生成图片二维码 思路很简单=> 生成一个随机数->保存到服 ...

  4. 基于《仙剑奇侠传柔情版》利用Java的简单实现(一)

    基于<仙剑奇侠传柔情版>利用Java的简单实现(一) 2018-12-01 23:55:36   by Louis  一,新建一个类GameFrame.class,具体代码如下: pack ...

  5. Journal of Proteome Research | Current understanding of human metaproteome association and modulation(人类宏蛋白质组研究近期综述)(解读人:李巧珍)

    文献名:Current understanding of human metaproteome association and modulation(人类宏蛋白质组研究近期综述) 期刊名:J Prot ...

  6. Mol. Cell. Proteomics | 糖蛋白基因组学:一种常见的基因多态性影响人血清胎球蛋白/α-2-HS-糖蛋白的糖基化形式

    大家好,本次分享的是发表在Molecular & Cellular Proteomics上的一篇关于糖蛋白基因组学的文章,题目是Glycoproteogenomics: A Frequent ...

  7. wr720n v4 折腾笔记(五):终篇-编译安装openwrt附带njit

    前言: 由于没有多余的U盘,所以想直接压缩生成一个带njit-client的openwrt固件.其中按照网上的教程走,遇到了一些问题,这里前面的步骤来源于网络.后面给出处理问题的方法. 一.准备工作 ...

  8. 使用一行Python代码从图像读取文本

    处理图像不是一项简单的任务.对你来说,作为一个人,很容易看着某样东西然后马上知道你在看什么.但电脑不是这样工作的. 对你来说太难的任务,比如复杂的算术,或者一般意义上的数学,是计算机毫不费力就能完成的 ...

  9. DOM 操作成本到底高在哪儿?

    从我接触前端到现在,一直听到的一句话:操作DOM的成本很高,不要轻易去操作DOM.尤其是React.vue等MV*框架的出现,数据驱动视图的模式越发深入人心,jQuery时代提供的强大便利地操作DOM ...

  10. VS2015 Visual Assist X 破解版安装教程

    前言 此方法适合VS2010~VS2015版本. 安装包下载方法:公众号[视觉IMAX]后台回复「VA助手」,即可得到安装包下载链接. 工作以来,一直在使用VS2015,之前一直根据的网上飘云阁的破解 ...