爬虫教程:教你如何爬取网页数据
事实上,在当今的文化中,互联网上有大量有益的信息。 要获得大量有用的数据,我们需要的只是一定的技术工具和仔细的观察。 在这里,网络爬虫就是“技术手段”。 今天给大家分享一些爬虫的基础知识。
爬虫是什么?
爬虫是一种自动收集网络资料的程序。 示例包括 Google、百度等搜索引擎,它们每天运行大量的爬虫系统,从世界各地的网站收集数据供消费者访问。
爬取方式
复制网页请求。 启动一个假浏览器并导航到所需的网站。
数据检索。 我们打开后就可以自动获取到我们需要的网页数据。
保存信息 数据获取后需要持久化到存储设备,比如本地文件或者数据库。
现在我们知道了如何使用 Python 来创建我们自己的爬虫软件,让我们来谈谈 requests Python 库。
请求使用
在 Python 中启动 HTTP 请求的一个非常有用且用户友好的包称为 requests 库。
使用python爬虫代码模拟提交HTTP请求
发送获取请求
浏览器打开豆瓣首页最原始的请求其实就是get请求。
导入请求
- res = requests.get(‘http://www.douban.com’)
- 打印(分辨率)
- 打印(类型(res))
- >>>
- <响应 [200]>
- <类’requests.models.response’>
如您所见,我们收到了一个响应对象。 如果需要,我们可以使用 text 或 content 属性来访问网站返回的数据。
文本:提供数据的字符串表示。
内容:返回二进制数据
- 打印(类型(res.text))
- 打印(res.text)
- >>>
- <class ‘str’> <!doctype html>
- <html lang=”zh-cmn-hans” class=””>
- <头>
- <元字符集=”utf-8″>
- <meta name=”google-site-verification” content=”ok0wcgt20tbbgo9_zat2iacimtn4ftf5ccsh092xeyw” />
- <meta name=”description” content=”提供书籍、电影、音乐录音和城市独特文化生活的推荐、评论和价格比较。”>
- <meta name=”keywords” content=”豆瓣、播放、登录豆瓣”>…..
发送后期请求
通常需要提交邮寄申请表格。
r = requests.post(‘http://www.xxxx.com’, data={“key”: “value”})
其中必须传递的表单数据是字典数据的一种。
头部强化
必须进行一些标头修改,因为某些网站会拒绝没有标头的请求。 示例包括 UA、cookie、主机和其他数据。
header = {“user-agent”: “Mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (khtml, like gecko) chrome/76.0.3809.100 safari/537.36”,
“cookie”: “your cookie}
res = requests.get(‘http://www.xxx.com’, headers=header)
解析 HTML
获取到网页返回的数据,也就是HTML代码后,我们要解析HTML,提取相关数据。
Beautiful Soul
名为“beautiful soul”的 Python 包的主要目的是解析来自网页的数据。
爬虫实战:爬虫豆瓣海报
我们可以通过豆瓣影人页面进入度影人影人照片页面。 比如刘涛,就有如下的英人图片页地址:
https://movie.douban.com/celebrity/1011562/photos/
现在分析这个页面
目标网站的页面分析
需要注意的是,互联网网站页面的内容总是在变化,因此您必须先学习本站的分析方法,然后再转向其他网站。
Chrome 开发者工具
正确使用 chrome 开发者工具很重要,它可以通过按 f12 键打开。
当我们右键单击任何图像并选择“Inspect”时,我们可以看到“Developer Tools”也已启动并且位于图像旁边,非常方便。
每一张图片都明确的放在了li标签中,li标签中的img包含了图片的地址。
一旦我们知道了这些限制,我们就可以使用beautifulsoup或者xpath来解析html页面,找到图片url。
代码创建
只需要几行代码就可以完成图片url的提取。
导入请求
从 bs4 导入 beautifulsoup
url = ‘https://movie.douban.com/celebrity/1011562/photos/’
res = requests.get(url).text
content = beautifulsoup(res, “html.parser”)
data = content.find_all(‘div’, attrs={‘class’: ‘cover’})
图片列表 = []
对于数据中的 d:
plist = d.find(‘img’)[‘src’]
picture_list.append(plist)
打印(图片列表)
>>>
‘https://img3.doubanio.com/view/photo/m/public/p2276569205.jpg’, ‘https://img1.doubanio. com/view/photo/m/public/p2165332728.jpg’]https://img3.doubanio.com/view/photo/m/public/p2276569205.jpg’, ‘https://img1.doubanio.com/view /photo/m/public/p2165332728.jpg’]https://img3.doubanio.com/view/photo/m/public/p2276569205.jpg’, ‘https://img1.doubanio.com/view/photo/ m/public/p2165332728.jpg’]
如您所见,这是一个组织良好的列表,其中保留了发帖人地址。
但这仅包含一页海报中的信息。 正如我们在查看时看到的那样,该页面具有很多分页功能。 如何处理分页。
总结
本节通过一个具体的例子,阐述了爬虫的基本操作以及必要的Python库和函数,总结了从网页分析到数据存储的整个过程。 实际上,爬虫只是模拟请求、解析数据和存储数据。
有时,网站还可能实施进一步的反爬措施,如cookie验证、请求频率分析、对其他浏览器用户的访问限制、js混淆等。目前需要反抓取等反爬设备。 使用代理IP访问,将cookie插入到headers中,然后使用Selenium模拟浏览器的等待模式。