网络爬虫的通俗理解
顾名思义,网络爬虫就是你把很多的爬虫放到网络上面去,抓取数据带回来,然后整合在一起,存储起来
网络爬虫的基本步骤
以Python语言为例:
- 找到需要爬取内容的网页
- 打开该网页的检查页面(即查看HTML代码,按F12快捷键即可进入)
- 在HTML代码中找到你要提取的数据
- 写python代码进行网页请求、解析
- 存储数据
举个例子
目标:爬取知乎上关于“你是如何开始能写Python爬虫?”问题的数据(问题、描述、关注数、浏览量)
其实这里对python的要求也仅限于你需要会数据类型、变量、运算符、函数、模块之类的简单语法。推荐学习网站:Python 入门指南、Python 学习- 廖雪峰的官方网站
1. 爬取 HTML 源码
这里用到的用于网页请求的库是requests,一个非常流行的http请求库。
Requests库会自动解码来自服务器的内容,大多数 unicode 字符集都能被无缝地解码。
这一切requests都能妥妥地搞定。
代码:
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只是文本字符串。
接着上面代码:
# 将html文档转换为XPath可以解析的
s = etree.HTML(r.text)
这下我们可以使用xpath库来进行信息的提取了。
xpath的使用方法这里不赘述了,大家可以网上搜搜资料,个半小时也能学会。
这里介绍一种简单的方法,你在开发者页面中找到对应信息的源码后,直接右键复制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)
最终呈现的结果:
完整代码:
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)
例子内容来自于 通俗的讲,网络爬虫到底是什么? - 朱卫军的回答 - 知乎