首页 > 编程 > Python > 正文

用python3教你任意Html主内容提取功能

2020-02-15 23:31:18
字体:
来源:转载
供稿:网友

本文将和大家分享一些从互联网上爬取语料的经验。

0x1 工具准备

工欲善其事必先利其器,爬取语料的根基便是基于python。

我们基于python3进行开发,主要使用以下几个模块:requests、lxml、json。

简单介绍一个各模块的功能

01|requests

requests是一个Python第三方库,处理URL资源特别方便。它的官方文档上写着大大口号:HTTP for Humans(为人类使用HTTP而生)。相比python自带的urllib使用体验,笔者认为requests的使用体验比urllib高了一个数量级。

我们简单的比较一下:

urllib:

 import urllib2 import urllib URL_GET = "https://api.douban.com/v2/event/list" #构建请求参数 params = urllib.urlencode({'loc':'108288','day_type':'weekend','type':'exhibition'}) #发送请求 response = urllib2.urlopen('?'.join([URL_GET,'%s'])%params)#Response Headersprint(response.info())#Response Codeprint(response.getcode())#Response Bodyprint(response.read())

requests:

import requests URL_GET = "https://api.douban.com/v2/event/list" #构建请求参数 params = {'loc':'108288','day_type':'weekend','type':'exhibition'} #发送请求 response = requests.get(URL_GET,params=params) #Response Headersprint(response.headers)#Response Codeprint(response.status_code)#Response Bodyprint(response.text)

我们可以发现,这两种库还是有一些区别的:

1. 参数的构建:urllib需要对参数进行urlencode编码处理,比较麻烦;requests无需额外编码处理,十分简洁。

2. 请求发送:urllib需要额外对url参数进行构造,变为符合要求的形式;requests则简明很多,直接get对应链接与参数。

3. 连接方式:看一下返回数据的头信息的“connection”,使用urllib库时,"connection":"close",说明每次请求结束关掉socket通道,而使用requests库使用了urllib3,多次请求重复使用一个socket,"connection":"keep-alive",说明多次请求使用一个连接,消耗更少的资源

4. 编码方式:requests库的编码方式Accept-Encoding更全,在此不做举例

综上所诉,使用requests更为简明、易懂,极大的方便我们开发。

02|lxml

BeautifulSoup是一个库,而XPath是一种技术,python中最常用的XPath库是lxml。

当我们拿到requests返回的页面后,我们怎么拿到想要的数据呢?这个时候祭出lxml这强大的HTML/XML解析工具。python从不缺解析库,那么我们为什么要在众多库里选择lxml呢?我们选择另一款出名的HTML解析库BeautifulSoup来进行对比。

我们简单的比较一下:

BeautifulSoup:

from bs4 import BeautifulSoup #导入库# 假设html是需要被解析的html#将html传入BeautifulSoup 的构造方法,得到一个文档的对象soup = BeautifulSoup(html,'html.parser',from_encoding='utf-8')#查找所有的h4标签 links = soup.find_all("h4")            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表