爬虫教程:教你如何爬取网页数据

事实上,在当今的文化中,互联网上有大量有益的信息。 要获得大量有用的数据,我们需要的只是一定的技术工具和仔细的观察。 在这里,网络爬虫就是“技术手段”。 今天给大家分享一些爬虫的基础知识。

爬虫是什么?

爬虫是一种自动收集网络资料的程序。 示例包括 Google、百度等搜索引擎,它们每天运行大量的爬虫系统,从世界各地的网站收集数据供消费者访问。

爬取方式

复制网页请求。 启动一个假浏览器并导航到所需的网站。

数据检索。 我们打开后就可以自动获取到我们需要的网页数据。

保存信息 数据获取后需要持久化到存储设备,比如本地文件或者数据库。

现在我们知道了如何使用 Python 来创建我们自己的爬虫软件,让我们来谈谈 requests Python 库。

请求使用

在 Python 中启动 HTTP 请求的一个非常有用且用户友好的包称为 requests 库。

使用python爬虫代码模拟提交HTTP请求

发送获取请求

浏览器打开豆瓣首页最原始的请求其实就是get请求。

导入请求

  1. res = requests.get(‘http://www.douban.com’)
  2. 打印(分辨率)
  3. 打印(类型(res))
  4. >>>
  5. <响应 [200]>
  6. <类’requests.models.response’>

如您所见,我们收到了一个响应对象。 如果需要,我们可以使用 text 或 content 属性来访问网站返回的数据。

文本:提供数据的字符串表示。

内容:返回二进制数据

  1. 打印(类型(res.text))
  2. 打印(res.text)
  3. >>>
  4. <class ‘str’> <!doctype html>
  5. <html lang=”zh-cmn-hans” class=””>
  6. <头>
  7. <元字符集=”utf-8″>
  8. <meta name=”google-site-verification” content=”ok0wcgt20tbbgo9_zat2iacimtn4ftf5ccsh092xeyw” />
  9. <meta name=”description” content=”提供书籍、电影、音乐录音和城市独特文化生活的推荐、评论和价格比较。”>
  10. <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模拟浏览器的等待模式。