爬虫简介:
网页爬取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。请求网站并提取数据的自动化程序
爬虫过程:
发起请求
通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的headers等信息,等待服务器响应
获取响应内容
如果服务器能正常响应,会得到一个Response,获得的页面内容有Html,Json字符串,二进制数据(如图片,视频等)
解析内容
得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析。可能是Json,可以直接转为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理。
保存数据
保存形式多样,可以存为文本,也可以保存至数据库,或者保存特定格式的文件。
爬取网页的基础知识-HTTP请求方法
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
爬取网页的基础知识-URL
URL是Uniform Resource Locator的缩写,即统一资源定位系统,也就是网址。
URL 遵守一种标准的语法,它由协议、主机名\域名、端口、路径、以及文件名这六个部分构成,
HTML与JavaScript基础-网页结构
1.网页一般由三部分组成,分别是 HTML(超文本标记语言)、CSS(层叠样式表)和 JScript(活动脚本语言)。
2.HTML是整个网页的结构,相当于整个网站的框架。带“<”、“>”符号的都是属于 HTML 的标签,并且标签都是成对出现的。
HTML与JavaScript基础-网页结构
JScript 表示功能。交互的内容和各种特效都在 JScript 中,JScript 描述了网站中的各种功能。
爬虫的合法性
每一个网站都有一个名为 robots.txt 的文档,当然也有部分网站没有设定 robots.txt。对于没有设定 robots.txt 的网站可以通过网络爬虫获取没有口令加密的数据,也就是该网站所有页面数据都可以爬取。如果网站有 robots.txt 文档,就要判断是否有禁止访客获取的数据。
爬取网页的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用于设置代理。
爬取网页的requests库
- requests库概述
简洁的处理HTTP请求的第三方库,建立在Python的urllib3库基础上,是对urllib3库的再封装。
requests库包括URL获取、HTTP长连接和连接缓存、自动内容解码、文件分块上传、连接超时处理、流数据下载等功能。 - requests库解析
Response对象提供了两个方法。
json():如果HTTP响应内容包含JSON格式数据,则该方法解析JSON数据。
raise_for_status():如果status_code值不是200,则产生异常。
beautifulsoup4库
1.beautifulsoup4库概述
beautifulsoup4库也称为bs4库或BeautifulSoup库
Python用于网页分析的第三方库,用来快速转换被抓取的网页。
beautifulsoup4将网页转换为一颗DOM树。
beautifulsoup4提供一些简单的方法以及类Python语法来查找、定位、修改一棵转换后的DOM树,还能自动将送进来的文档转换为Unicode编码。
beautifulsoup4库-操作解析文档树
搜索文档树
(1)find_all()方法
搜索当前Tag的所有子结点,语法如下。
find_all(name,attrs,recursive,text,**kwargs)
name:名字为name的标签。
attrs:按照Tag标签属性值检索,采用字典形式。
recursive:如果只想搜索Tag的直接子结点,可以使用参数recursive=False。
text:通过text参数可以搜索文本字符中内容。
limit:限制返回结果的数量。
(2)find()方法
find()方法返回找到的第一个结果。
find(name,attrs,recursive,text)
参数含义与find_all()方法完全相同。
用CSS选择器筛选元素
CSS的选择器用于选择网页元素,可以分为标签选择器、类选择器和id选择器三种。
在CSS中,标签名不加任何修饰,类名前面需要加点(.)标识,id名前加#号来标识。
在bs4库中,也可以利用类似的方法来筛选元素,用到的方法是soup.select(),返回类型是列表。