第十五章 Python网络爬虫

1.爬虫简介:网页爬取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。请求网站并提取数据的自动化程序。
2.爬取网页的基础知识-HTTP协议:
(1)HTTP协议简介:
超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
HTTP的发展是由蒂姆·伯纳斯-李于1989年在欧洲核子研究组织(CERN)所发起。1999年6月公布的 RFC 2616,定义了HTTP协议中现今广泛使用的一个版本——HTTP 1.1。
2014年12月,互联网工程任务组(IETF)将HTTP/2标准提议递交至IESG进行讨论,于2015年2月17日被批准。 HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP 1.1成为HTTP的实现标准。
(2)HTTP协议概述
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。
(3)HTTP工作过程
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
(1)客户端与服务器建立连接。
(2)发送HTTP请求
(3)服务器接到请求后,给予相应的响应信息。
(4)释放连接TCP连接
(5)客户端接收服务器所返回的信息,浏览器解析并显示网页。
3.爬取网页的基础知识-HTTP协议:1)浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request。
(2)服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然后把消息回传给浏览器。这个过程叫做HTTP Response。
(3)浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示。
4.爬取网页的基础知识-HTTP请求方法:HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456.(请求头里面那个content-type做的这种参数形式,后面讲) POST方法是把提交的数据放在HTTP包的请求体中.
GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
5.爬取网页的基础知识-HTTP状态码:所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
6.爬取网页的基础知识-URL:URL是Uniform Resource Locator的缩写,即统一资源定位系统,也就是网址。URL 遵守一种标准的语法,它由协议、主机名\域名、端口、路径、以及文件名这六个部分构成。
7.HTML与JavaScript基础-网页结构:(1).网页一般由三部分组成,分别是 HTML(超文本标记语言)、CSS(层叠样式表)和 JScript(活动脚本语言)。
(2).HTML是整个网页的结构,相当于整个网站的框架。带“<”、“>”符号的都是属于 HTML 的标签,并且标签都是成对出现的。
在这里插入图片描述
(3)CSS:CSS 表示样式,<style type="text/css">表示下面引用一个 CSS,在 CSS 中定义了外观。
(4) JScript 表示功能。交互的内容和各种特效都在 JScript 中,JScript 描述了网站中的各种功能。
如果用人体来比喻,HTML 是人的骨架,并且定义了人的嘴巴、眼睛、耳朵等要长在哪里。CSS 是人的外观细节,如嘴巴长什么样子,眼睛是双眼皮还是单眼皮,是大眼睛还是小眼睛,皮肤是黑色的还是白色的等。JScript 表示人的技能,例如跳舞、唱歌或者演奏乐器等。
8.爬取网页的urllib库:(1).urllib库::Python3.x标准库urllib提供了urllib.request、urllib.response、urllib.parse和urllib.error四个模块,很好地支持了网页内容读取功能。再结合Python字符串方法和正则表达式,可以完成一些简单的网页内容爬取工作,也是理解和使用其他爬虫库的基础。(2)使用urllib库获取网页信息使用 urllib.request.urlopen()函数可以打开一个网站,读取并打印网页信息。 urllib.urlopen(url, data[, proxies])
urlopen()函数返回response对象函数的参数url表示远程数据的路径;data表示提交到url的数据;proxies用于设置代理。(2)2. 使用urllib库获取网页信息response对象的方法:
info()方法: 返回一个httplib.HTTPMessage对象。
getcode()方法:返回HTTP状态码。如果是HTTP请求,200表示请求成功完成,404表示网址未找到。geturl():返回请求的url。
9.爬取网页的requests库:(1)requests库概述::简洁的处理HTTP请求的第三方库,建立在Python的urllib3库基础上,是对urllib3库的再封装。
requests库包括URL获取、HTTP长连接和连接缓存、自动内容解码、文件分块上传、连接超时处理、流数据下载等功能。(2) requests库解析
requests库的requests.get()方法功能是网络爬虫和信息提交
res=requests.get(url[,timeout=n])该函数返回的网页内容会保存为一个response对象。参数url必须采用HTTP或HTTPS方式访问,可选参数timeout用于设定每次请求超时时间。(3)requests库解析
requests.get() 返回的response对象代表响应。response对象的主要属性如下。
● status_code:返回HTTP请求的状态,200表示连接成功,404表示失败。
● text:HTTP响应内容的字符串形式,即url对应的页面内容。
● encoding:HTTP响应内容的编码方式。
● content:HTTP响应内容的二进制形式。
10.beautifulsoup4库:beautifulsoup4库也称为bs4库或BeautifulSoup库
Python用于网页分析的第三方库,用来快速转换被抓取的网页。
beautifulsoup4将网页转换为一颗DOM树。
beautifulsoup4提供一些简单的方法以及类Python语法来查找、定位、修改一棵转换后的DOM树,还能自动将送进来的文档转换为Unicode编码。
11.beautifulsoup4库-操作解析文档树:(1)获取直接子结点
contents属性和children属性可以获取Tag的直接子结点。
(2)获取所有有子结点
descendants属性可以对所有Tag的子结点进行递归循环,需要遍历获取其中的内容。
(3)获取结点内容
当标签中不再包含标签,string属性返回标签中的内容;
标签中内嵌唯一标签,那么string属性返回最里面标签的内容;
Tag包含了多个子标签结点,string的输出结果是None。
(4)获取多项内容
strings属性用于获取多个内容,需要遍历获取。
(5)父结点
父结点是当前结点的上级结点,parent属性用于获取父结点。
(6)兄弟结点
兄弟结点可以理解为和本结点处在同一层级的结点,next_sibling属性用于获取当前结点的下一个兄弟结点,previous_sibling则与之相反,如果结点不存在,则返回None。
以上是本章所有内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网络爬虫是一种自动获取网页内容的程序,常用于数据采集、搜索引擎等领域。Python是一种非常适合编写网络爬虫的语言,它具有简单易学、强大的库支持和丰富的第三方工具等优点。下面是网络爬虫的设计与实现测试。 1. 设计 网络爬虫的设计一般包括以下几个步骤: (1)确定目标网站和爬取内容 首先需要确定要爬取的目标网站和需要获取的内容。可以根据自己的需求选择合适的网站和内容,例如获取新闻、图片、音频、视频等。 (2)分析目标页面 了解目标页面的结构和规律,确定需要提取的信息所在的位置和方式。可以使用开发者工具查看页面的源代码,或者使用第三方工具如BeautifulSoup等解析网页。 (3)编写爬虫程序 根据目标页面的结构和规律,编写爬虫程序来获取所需的信息。可以使用Python的Requests库发起HTTP请求,使用正则表达式或BeautifulSoup等解析网页内容,再将结果保存到本地或数据库中。 (4)设置爬虫参数 在编写爬虫程序时需要设置一些参数,例如请求头、请求方式、超时时间、代理等,以便更好地模拟浏览器行为和防止被封IP。 (5)处理异常情况 在爬取过程中可能会遇到各种异常情况,例如页面不存在、网络连接超时、IP被封等。需要编写相应的异常处理程序来保证爬虫的稳定性和准确性。 2. 实现测试 下面是一个简单的基于Python网络爬虫实现示例,该程序可以从百度新闻中获取指定关键词的新闻标题和链接,并将结果保存到本地txt文件中。 ```python import requests from bs4 import BeautifulSoup # 设置请求头 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 发起HTTP请求 url = 'https://www.baidu.com/s?ie=UTF-8&wd=Python' response = requests.get(url, headers=headers) # 解析网页内容 soup = BeautifulSoup(response.text, 'html.parser') news_list = soup.find_all('h3', class_='news-title') # 输出结果 with open('news.txt', 'w', encoding='utf-8') as f: for news in news_list: title = news.a.text link = news.a['href'] f.write(title + '\n' + link + '\n') print(title) print(link) ``` 运行结果如下: ``` Python官方:Python 2.x is officially discontinued https://www.infoq.cn/article/7nKZiFJxXZPb3l1qeQsV Python for Finance: Analyze Big Financial Data https://www.datacamp.com/community/tutorials/finance-python-trading Python之父:我退休了,Python 3.9仍将如期发布 https://www.jiqizhixin.com/articles/2020-07-15-3 Python爬虫之BeautifulSoup详解 https://www.cnblogs.com/zhaof/p/6933133.html Python 3.9.0b4 发布 https://www.oschina.net/news/117273/python-3-9-0b4-released Python Web 服务器搭建指南 https://www.cnblogs.com/liubin2000/p/PythonWebServer.html ``` 同时会在本地生成一个news.txt文件,其中包含了所有新闻标题和链接。 总之,Python是一种非常适合编写网络爬虫的语言,具有简单易学、强大的库支持和丰富的第三方工具等优点。通过以上实现示例,可以看出Python网络爬虫开发具有高效、灵活、易维护等特点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值