Python 系列 -- 网络爬虫

网络爬虫的通俗理解

顾名思义,网络爬虫就是你把很多的爬虫放到网络上面去,抓取数据带回来,然后整合在一起,存储起来

网络爬虫的基本步骤

以Python语言为例:

  1. 找到需要爬取内容的网页
  2. 打开该网页的检查页面(即查看HTML代码,按F12快捷键即可进入)
  3. 在HTML代码中找到你要提取的数据
  4. 写python代码进行网页请求、解析
  5. 存储数据

举个例子

目标:爬取知乎上关于“你是如何开始能写Python爬虫?”问题的数据(问题、描述、关注数、浏览量)

image.png

其实这里对python的要求也仅限于你需要会数据类型、变量、运算符、函数、模块之类的简单语法。推荐学习网站:Python 入门指南Python 学习- 廖雪峰的官方网站

1. 爬取 HTML 源码

这里用到的用于网页请求的库是requests,一个非常流行的http请求库。

Requests库会自动解码来自服务器的内容,大多数 unicode 字符集都能被无缝地解码。

这一切requests都能妥妥地搞定。

代码:

1
2
3
4
5
6
python复制代码import requests
headers = {'User-Agent':你的浏览器headers}
# 传入url和请求头
r = requests.get('https://www.zhihu.com/question/21358581',headers = headers)
# 响应的内容
print(r.text)

我们会接收到服务器返回的页面,requests解析后,呈现下面这样子:

这就是我们需要的html源码!

接下来要做的就是从html中抽取我们需要的四个信息。

XPath 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。

这里用到另一个有用的库xpath,xpath库可以让你轻松的使用XPath语言查找信息。

既然XPath是在XML文档中才能起作用,然而我们刚刚获取的html只是文本字符串。

接着上面代码:

1
2
python复制代码# 将html文档转换为XPath可以解析的
s = etree.HTML(r.text)

这下我们可以使用xpath库来进行信息的提取了。

xpath的使用方法这里不赘述了,大家可以网上搜搜资料,个半小时也能学会。

这里介绍一种简单的方法,你在开发者页面中找到对应信息的源码后,直接右键复制xpath地址:

接上面代码:

1
2
3
4
5
6
7
python复制代码q_content = s.xpath('//*[@class="QuestionHeader-title"]/text()')[0] # 获取问题内容
q_describe = s.xpath('//*[@class="RichText ztext"]/text()')[0] # 获取问题描述
q_numbers = s.xpath('//*[@class="NumberBoard-itemValue"]/text()') # 获取关注数和浏览量
concern_num = q_numbers[0]
browing_num = q_numbers[1]
# 打印
print('问题:',q_content,'\n','描述:',q_describe,'\n''关注数:',concern_num,'\n''浏览量:',browing_num)

最终呈现的结果:

image.png

完整代码:

1
2
3
4
5
6
7
8
9
10
11
12
python复制代码import requests
from lxml import etree
headers = {'User-Agent':你的浏览器headers}
r = requests.get('https://www.zhihu.com/question/21358581',headers = headers) # 传入url和请求头
s = etree.HTML(r.text) # 将html文档转换为XPath可以解析的
q_content = s.xpath('//*[@class="QuestionHeader-title"]/text()')[0] # 获取问题内容
q_describe = s.xpath('//*[@class="RichText ztext"]/text()')[0] # 获取问题描述
q_numbers = s.xpath('//*[@class="NumberBoard-itemValue"]/text()') # 获取关注数和浏览量
concern_num = q_numbers[0]
browing_num = q_numbers[1]
# 打印
print('问题:',q_content,'\n','描述:',q_describe,'\n''关注数:',concern_num,'\n''浏览量:',browing_num)

例子内容来自于 通俗的讲,网络爬虫到底是什么? - 朱卫军的回答 - 知乎

参考文章

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%