python网络爬虫_纯干货:Python网络爬虫如何入门

什么是爬虫

网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已经成为如今主流的爬虫策略。

为什么学习网络爬虫?

在数据爆发增长的互联网时代,网站与用户的沟通本质上是数据的交换:搜索引擎从数据库中提取搜索结果,将其展现在用户面前;电商将产品的描述、价格展现在网站上,以供买家选择心仪的产品;社交媒体在用户生态圈的自我交互下生产大量文本、图片和视频数据。这些数据如果得以分析利用,不仅能够帮助第一方企业做出更好的决策,对于第三方企业也是有益的。

爬虫可以做什么

  1. 私人定制一个搜索引擎,并且可以对搜索引擎的数据采集工作原理,进行深层次地理解
  2. 为大数据分析提供更多高质量的数据源
  3. 更好地研究搜索引擎优化
  4. 爬取自己想看的视频、图片、音乐等、解决就业问题等等

爬虫的本质是什么

模拟浏览器打开网页、获取网页中我们想要的那部分数据

爬虫的基础知识部分介绍

HTML语言规范

HTML文档都具有一个基本的整体结构,包括头部(Head)和主体(Body)两大部分,其中头部描述浏览器所需的信息,主体包含网页所要展示的具体内容。

4b529e4c5f8f6e2b4ac71c7ef09aa2ef.png

头部描述浏览器所需要的信息,比如页面标题、关键词、说明等内容;头部包含的信息不作为网页的内容来显示,但是会影响到网页的显示效果。头部信息的开始和结尾是由<head>和</head>两个标签标记的,<title>、<base>、<link>、<meta>、<script> 以及 <style>标签可以添加到头部信息中。

网页需要显示的实际内容都包含在主体之中,由<body>、</body>表示主体信息的开始和结尾。对于网络爬虫抓取Web页面而言,所关注的信息内容也都是大部分封装在<body>和</body>之间。

与爬虫程序设计相关常用标签

  • <p>

<p>标签定义段落可以将要显示的文章内容放在<p>与</p>标签之间。该标签会自动在段落前后添加一些空白,可以使用CSS来进行调整。通常在Web页面中正文部分的各个段落都是通过该标签来表示。

  • <div>

<div>用来定义文档中的分区或节,把文档分割成为独立的部分,经常用于网页布局。该标签通常会使用id 或 class 属性设计额外的样式,其中,class 用于元素组,而 id 用于标识单独的唯一的元素。

  • <table>

<table>定义页面的表格,在很多页面中数据以表格形式展现,因此也是爬虫程序需要处理的重要标签之一。

html页面中的简单表格由table元素以及一个或多个tr、th、td元素组成。其中,tr元素定义表格行,td元素定义表格单元,th元素定义表格标题列;同时,th默认加粗并居中显示。<table>的常用属性为表格边框属性border,当使用border="1"设置边框时,会在所有表格单元以及表格上嵌套边框。

  • <a>

<a> 标签定义超链接,用于从一张页面链接到另一张页面,其最重要的属性是href,它指示链接的目标。爬虫在采集到一个Web页面之后,就需要在页面中寻找该标签,并提取出超链接作为新的爬行任务。

  • <base>

为了简化包含相对路径的超链接的转换过程,HTML语言提供了<base> 标签,用来指定页面中所有超链接的基准路径。例如,如果在p.html中有如下的<base>标签,

<base href="http://www.a.b.c/aaa/" />那么,<img src="images/p2.gif">表示从http://www.a.b.c/aaa/images/p2.gif获得图片文件。

  • <script>

<script> 用于在html页面内插入脚本。其type属性为必选的属性,用来指示脚本的 MIME 类型。下面的代码在html页面内插入javascript脚本,在网页中输出“Hello World!”。

<script type="text/javascript">document.write("Hello World!")</script>

详见如下地址:bs标签的提取html标签基础.pdf

编码体系与规范

Python 3中的字符串默认的编码为unicode,因此,gbk、gb2312等字符编码与utf-8编码之间都必须通过unicode编码才能互相转换。即在python中,使用encode()将unicode编码为utf-8、gbk等,而使用decode()将utf-8、gbk等字符编码解码为unicode。

a3f99873f1ea64cfacf62781577579a0.png

Robots协议

为了给Web网站提供灵活的控制方式来决定页面是否能够被爬虫采集,1994年搜索行业正式发布了一份行业规范,即Robots协议。Robots协议又称为爬虫协议、机器人协议等,其全称是Robots Exclusion Protocol,即“网络爬虫排除协议”。

Robots协议的规范

在浏览器中打开网站后,在网站首页的地址后面添加“/robots.txt”,如果网站设置了访问许可,按回车就可以看到网站的robots协议,即robots.txt文件内容。

83e00c5d9dbc21cc4048b365654b4f56.png

HTTP报文

HTTP的报文可分为两种:请求报文与响应报文。

  • request Message(请求报文) 客户端 → 服务器端,用于向网站请求不同的资源,包括HTML、文档、图片
  • response Message(响应报文) 服务器端 →客户端,服务器响应客户端的请求时发送回来报文,可以是HTML文档的内容,也可以是图片的二进制数据等

HTTP状态码

HTTP状态码(HTTP Status Code)是用来表示网页服务器HTTP响应状态的3位数字代码。通过状态码可以得知服务器的响应状态,以便更好地处理通信过程中遇到的问题。

1bc12f737ff3745fe438b15d0158359a.png

爬虫的基本流程

  1. 准备工作

通过浏览器查看分析目标网页、学习编程基础规范

  1. 获取网页

获取网页:给一个网址发送请求,该网址会返回整个网页的数据。类似于在浏览器中键入网址并按回车键,然后可以看到整个页面。

  1. 分析页面(提取数据)

从整个网页的数据中提取想要的数据。类似于在浏览器中看到网站的整个页面,但是你想要找的是产品的价格,价格就是你想要的数据。

  1. 存储数据

就是把数据存储下来,我们可以存储在CSV中,也可以存储在数据库中。

爬虫的技术实现

1.获取网页 pip install requests

  1. 获取网页的基础技术:requests、urllib、selenium(模拟浏览器)
  2. 获取网页的进阶技术:多线程多进程抓取、登陆抓取、突破IP封禁和服务器抓取。

2.解析网页 pip install bs4

  1. 解析网页的基础技术:re正则表达式、BeautifulSoup、xml
  2. 解析网页的进阶技术:解决中文乱码。

3.存储数据

  1. 存储数据的基础技术:存入txt文件、存入CSV文件
  2. 获取网页的进阶技术:存入mysql数据库和存入mongoDB数据库。

Requests库的函数

0ea6ed343b675ad0aa8f2a5833d405b0.png

r=requests.get("http://www.fudan.edu.cn/")get函数的返回结果,是一个requests.Response对象。函数get的参数**kwargs是用于控制请求的一些附属特性,包括主要的控制参数及功能介绍如下:

(1)headers:是Python中的字典型变量,可以用来模拟任何浏览器标识来发起url访问。

(2)cookies:字典或CookieJar,指的是从http中解析cookie

(3)timeout: 用于设定超时时间, 单位为秒,当发起一个get请求时可以设置一个timeout时间, 如果在timeout时间内请求内容没有返回, 将产生一个timeout的异常。

(4)proxies:字典, 用来设置访问代理服务器。

(5)params:字典或字节序列, 作为参数增加到url中,使用这个参数可以把一些键值对以?key1=value1&key2=value2的模式增加到url中 例如:

kv = {‘key1: ’ values, ‘key2’: values}

r = requests.request(‘GET’, ‘http:http://www.python123.io/ws’, params=kw)

(6)data:字典,字节序或文件对象,重点作为向服务器提供或提交资源是提交,作为request的内容

151157417947aa4f36ec96f12a92171e.png

为了正确地从get的返回结果中获得页面内容,一个很重要的步骤是需要检查页面的编码方式,然后设置requests.Response对象的encoding属性。

r = requests.get("http://www.fudan.edu.cn/", headers = {'User-Agent' : 'Mozilla/5.0'}, timeout=10) #同时指定了headers和timeout

r.encoding=’utf-8’ #设定为页面的编码,即页面源码中charset的值

r.text #此为页面的HTML文本信息

Beautiful Soup

bs标签的提取beautifulSoup库的安装.pdf

Beautiful Soup是python的一个HTML或XML的解析库,我们可以用它来方便的从网页中提取数据,它拥有强大的API和多样的解析方式。

Beautiful Soup的三个特点:

  • Beautiful Soup提供一些简单的方法和python式函数,用于浏览,搜索和修改解析树,它是一个工具箱,通过解析文档为用户提供需要抓取的数据
  • Beautiful Soup自动将转入稳定转换为Unicode编码,输出文档转换为UTF-8编码,不需要考虑编码,除非文档没有指定编码方式,这时只需要指定原始编码即可
  • Beautiful Soup位于流行的Python解析器(如lxml和html5lib)之上,允许您尝试不同的解析策略或交易速度以获得灵活性。
  • Beautiful Soup在解析时实际上是依赖解析器的,它除了支持python标准库中的HTML解析器外还支持第三方解析器如lxml。

446608d78c13904ef2f077b1b16cba06.png

bs标签的提取bs高级查找文档1.pdf

bs标签的提取BSoup提取标签.pdf

爬虫项目一:2019年中国最好大学排名

任务介绍

需求分析:爬取最好大学网,软科中国最好大学排名2019的数据,包括名次、学校名称、省份、总分、指标得分。

网址:http://www.zuihaodaxue.com/zuihaodaxuepaiming2019.html

3baa64fd3a9b85940096f9aa871ed51d.png

爬虫的基本流程

  • 准备工作

通过浏览器查看分析目标网页,学习编程基础规范。

  • 获取数据

通过request库向目标网站发起请求,请求可以包含的headers等信息,如果服务器能够正常响应,会得到一个response,这就是所需要获取的页面内容。

  • 解析内容

得到的内容可能是html、json等格式,可以用页面解析库、正则表达式等进行页面的解析。

  • 保存数据

保存数据的形式可以有多种样式,可以是文本,也可以保存到数据库,或者特定格式的文件。

准备工作

  1. 分析页面

7f3c41c532caf0e274d091da35b5c909.png
  1. 获取页面内容

def getHTMLText(url):

headers = {
'user-agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

} #伪装为浏览器去请求访问网页

r=requests.get(url,timeout=30,headers=header)
print(r.status_code) # 状态码 判断请求是否成功
r.encoding=r.apparent_encoding
return r.text

  1. 解析内容

#对爬取的html文件进行解析

def fillUnivList(ulist,html):

soup=BeautifulSoup(html,"html.parser")
for tr in soup.find("tbody").children: #遍历所有的tbody中的tr标签
if isinstance(tr,bs4.element.Tag):
tds=tr('td') #tr中的td标签,即为表中的每一列数据
ulist.append([tds[0].string,tds[1].string,tds[2].string,tds[3].string])

4.保存数据

def save_UnivList(ulist,num):

fn=r"大国大学排名表.xlsx"
wb=Workbook() #创建工作簿
ws=wb.worksheets[0]
ws.title="2019中国大学排名信息" #更改表的名称
ws.append(["2019排名", "学校名称", "省份","分数"]) #添加表头信息
for i in range(num): #前num名学校信息
u = ulist[i]
ws.append(u)
wb.save(fn) #保存工作簿

源码详见:D:2019-实训spark-爬虫中国大学排名2019

资源推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值