python抓取网页数据(Python非常适合架构架构组成管理器:管理待爬取的url)
优采云 发布时间: 2022-04-10 07:15python抓取网页数据(Python非常适合架构架构组成管理器:管理待爬取的url)
前言
Python 非常适合开发网络爬虫,原因如下:
1、抓取网页本身的接口
相比其他静态编程语言,如java、c#、c++、python,爬取网页文档的界面更加简洁;与 perl、shell 等其他动态脚本语言相比,python 的 urllib2 包提供了对 web 文档更完整的访问。API。(当然*敏*感*词*也是不错的选择)
另外,爬取网页有时需要模拟浏览器的行为,很多网站被屏蔽用于生硬的爬虫爬取。这就是我们需要模拟用户代理的行为来构造适当的请求的地方,例如模拟用户登录,模拟会话/cookie存储和设置。python中有非常好的第三方包可以帮助你,比如Requests,mechanize
2、网页抓取后的处理
抓取的网页通常需要进行处理,比如过滤html标签、提取文本等。Python的beautifulsoap提供了简洁的文档处理功能,可以用极短的代码完成大部分文档处理。
其实很多语言和工具都可以做到以上功能,但是python可以做到最快最干净。
人生苦短,你需要python。
PS:python2.x 和 python3.x 很不一样。本文只讨论python3.x的爬虫实现方法。
爬虫架构
架构组成
URL管理器:管理待爬取的url集合和已爬取的url集合,并将待爬取的url发送给网页下载器。
网页下载器(urllib):抓取url对应的网页,存储为字符串,发送给网页解析器。
网页解析器(BeautifulSoup):解析出有价值的数据,存储起来,补充url给URL管理器。
运行进程
网址管理器
基本技能
将新的 url 添加到要抓取的 url 集中。
判断要添加的url是否在容器中(包括要爬取的url集合和爬取的url集合)。
获取要爬取的url。
判断是否有需要抓取的url。
将爬取的 URL 从待爬取的 URL 集合中移动到已爬取的 URL 集合中。
储存方法
1、内存(python内存)
要爬取的url集合:set()
抓取的url集合:set()
2、关系型数据库(mysql)
网址(网址,is_crawled)
3、缓存(redis)
要爬取的url集合:set
爬取的 url 集合:set
由于缓存数据库的高性能,大型互联网公司一般将 URL 存储在缓存数据库中。小公司一般将 URL 存储在内存中,如果要永久存储,请将其存储在关系数据库中。
网页下载器 (urllib)
将url对应的网页下载到本地,保存为文件或字符串。
基本方法
新建一个baidu.py,内容如下:
在命令行执行python baidu.py,打印出得到的页面。
构造请求
上面的代码可以修改为:
携带参数
新建一个baidu2.py,内容如下:
使用 Fiddler *敏*感*词*数据
我们想看看我们的请求是否真的携带参数,所以我们需要使用fiddler。
打开fiddler后,无意中发现上面的代码会报错504,不管是baidu.py还是baidu2.py。
虽然python报错,但是在fiddler中,我们可以看到请求信息,里面确实携带了参数。
查资料发现以前的python版本不支持代理环境下访问https。但是,最新版本应该支持它。那么,最简单的方法就是更改使用http协议进行爬取的url,例如,将其替换为 . 结果还是报错,但是变成了400错误。
然而,然而,然而。. . 神的转折点出现了!!!
当我将 url 替换为 时,请求成功!没错,就是在 URL 后面多加了一个斜杠 /。同理,改成,请求也成功了!神奇!!!
添加处理器
Web 解析器 (BeautifulSoup)
从网页中提取有价值的数据和新的 url 列表。
解析器选择
为了实现解析器,可以选择使用正则表达式、html.parser、BeautifulSoup、lxml等,这里我们选择BeautifulSoup。
其中,正则表达式基于模糊匹配,而其他三个基于DOM结构化解析。
美丽汤
安装测试
1、要安装,在命令行执行pip install beautifulsoup4。
2、测试
*敏*感*词*bs4
打印(bs4)
使用说明
基本用法
1、创建 BeautifulSoup 对象
2、访问节点
3、指定标签、类或id
4、从文档中找到所有标签的链接
出现了警告。根据提示,我们可以在创建 BeautifulSoup 对象时指定解析器。
汤 = BeautifulSoup(html_doc,'html.parser')
5、从文档中获取所有文本内容
打印(soup.get_text())
6、正则匹配
link_node = soup.find("a',href=pile(r"til"))
打印(链接节点)
后记
python爬虫的基础知识就够了。接下来,在实战中学习更高级的知识。
结尾。