会 python 的一定会爬虫吗,来看看
文章更新于:2020-02-18
注:python 爬虫当然要安装 python,如何安装参见:python 的安装使用和基本语法
一、什么是网络爬虫
网络爬虫就是用代码模拟人类去访问网站以获取我们想要信息。由于代码模拟的速度和效率很高,所以可以批量和动态获取我们想要的信息。比如抢票软件就是一直用代码访问12306网站获取余票信息,一有余票立马使用代码进行模拟购买。
二、网络爬虫的分类
- 通用网络爬虫。又称全网爬虫,爬行对象从一些种子URL扩充至整个Web,主要为门户站点、搜索引擎和大型Web服务提供商采集数据。
 - 聚焦网络爬虫。是指有选择性的爬行哪些与预定主题相关页面的网络爬虫。
 - 增量式网络爬虫。是指对已下载网页采取增量式更新的爬虫,只爬行发生更新的网页,减少了数据下载量。
 - 深层网络爬虫。深层网页是指只有用户提交一些关键词才能获取的Web页面,隐藏在搜索表单后的。
 
三、网络爬虫的架构
- URL管理器:放置重复抓取和循环抓取。
 - 网页下载器:用于下载网页,爬虫的核心部分之一。
 - 网页解析器:用于提取网页中自己想要的数据,爬虫的另一个核心部分。
 - 输出管理器:用于保存信息,将数据输出到文件或数据库。
 
四、爬虫如何工作
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 的一定会爬虫吗,来看看的更多相关文章
- Python初学者之网络爬虫(二)
		
声明:本文内容和涉及到的代码仅限于个人学习,任何人不得作为商业用途.转载请附上此文章地址 本篇文章Python初学者之网络爬虫的继续,最新代码已提交到https://github.com/octans ...
 - 【Python】:简单爬虫作业
		
使用Python编写的图片爬虫作业: #coding=utf-8 import urllib import re def getPage(url): #urllib.urlopen(url[, dat ...
 - 使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道
		
使用python/casperjs编写终极爬虫-客户端App的抓取-ZOL技术频道 使用python/casperjs编写终极爬虫-客户端App的抓取
 - [Python学习] 简单网络爬虫抓取博客文章及思想介绍
		
前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy ...
 - 洗礼灵魂,修炼python(69)--爬虫篇—番外篇之feedparser模块
		
feedparser模块 1.简介 feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom .使用它我们可从任何 RSS 或 Atom 订阅源得到标题.链接和文章的 ...
 - 洗礼灵魂,修炼python(50)--爬虫篇—基础认识
		
爬虫 1.什么是爬虫 爬虫就是昆虫一类的其中一个爬行物种,擅长爬行. 哈哈,开玩笑,在编程里,爬虫其实全名叫网络爬虫,网络爬虫,又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者 ...
 - 使用Python + Selenium打造浏览器爬虫
		
Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操 ...
 - Python 利用Python编写简单网络爬虫实例3
		
利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://bbs.51testing. ...
 - Python 利用Python编写简单网络爬虫实例2
		
利用Python编写简单网络爬虫实例2 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站“http://www.51testing. ...
 
随机推荐
- python网络协议
			
一 互联网的本质 咱们先不说互联网是如何通信的(发送数据,文件等),先用一个经典的例子,给大家说明什么是互联网通信. 现在追溯到八九十年代,当时电话刚刚兴起,还没有手机的概念,只是有线电话,那么此时你 ...
 - python如何用format进行进制转换与如何删除进制前缀
			
10进行十进制,十六进制,八进制,二进制的转换:(#:保留进制前缀)对于带着进制前缀的,如"0x"“0o”“0b”,可以直接在后面加上’x’‘o’'b’进行删除:其他的一些小技巧: ...
 - SQL中rownumber的用法
			
1)一次排名: 语法:row_number() over(order by 字段 desc/asc):按照某个字段排名 1.1.查询语句: 1.2.查询结果:查询结果按照薪水进行排名 2)先分组后排名 ...
 - C++ 回调函数,拷贝文件
			
#include <iostream> #include <windows.h> using namespace std; unsigned long long transla ...
 - 使用 Github Action 进行前端自动化发布
			
前言 说起自动化,无论是在公司还是我们个人的项目中,都会用到或者编写一些工具来帮助我们去处理琐碎重复的工作,以节约时间提升效率,尤其是我们做前端开发会涉及诸如构建.部署.单元测试等这些开发工作流中重复 ...
 - Python下载各种功能包出问题
			
问题详情 点击之后出现 AttributeError: module 'importlib._bootstrap' has no attribute 'SourceFileLoader' 解决方法 c ...
 - AndroiBugs Android漏洞扫描器
			
Download Address:https://github.com/AndroBugs/AndroBugs_Framework Usage for Unix/Linux: ####To run t ...
 - Mysql性能优化:为什么要用覆盖索引?
			
导读 相信读者看过很多MYSQL索引优化的文章,其中有很多优化的方法,比如最佳左前缀,覆盖索引等方法,但是你真正理解为什么要使用最佳左前缀,为什么使用覆盖索引会提升查询的效率吗? 本篇文章将从MYSQ ...
 - 【Code Force】Round #589 (Div. 2) D、Complete Tripartite
			
题目链接 大致题意 把一个图分成三块,要求任意两块之间是完全图,块内部没有连线 分析 首先根据块内没有连线可以直接分成两块 假定点1是属于块1的,那么所有与点1连接的点,都不属于块1:反之则是块1的 ...
 - Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍
			
Java并发包下锁学习第二篇队列同步器 还记得在第一篇文章中,讲到的locks包下的类结果图吗?如下图:  从图中,我们可以看到AbstractQueuedSynchronizer这个类很重要(在本 ...