博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫的两套解析方法和四种爬虫实现
阅读量:6628 次
发布时间:2019-06-25

本文共 3131 字,大约阅读时间需要 10 分钟。

对于大多数朋友而言,爬虫绝对是学习python的最好的起手和入门方式。因为爬虫思维模式固定,编程模式也相对简单,一般在细节处理上积累一些经验都可以成功入门。本文想针对某一网页对python基础爬虫的两大解析库(BeautifulSouplxml)和几种信息提取实现方法进行分析,以开python爬虫之初见。

基础爬虫的固定模式

笔者这里所谈的基础爬虫,指的是不需要处理像异步加载、验证码、代理等高阶爬虫技术的爬虫方法。一般而言,基础爬虫的两大请求库urllibrequestsrequests通常为大多数人所钟爱,当然urllib也功能齐全。两大解析库BeautifulSoup因其强大的HTML文档解析功能而备受青睐,另一款解析库lxml在搭配xpath表达式的基础上也效率提高。就基础爬虫来说,两大请求库和两大解析库的组合方式可以依个人偏好来选择。

笔者喜欢用的爬虫组合工具是:

requests+BeautifulSoup

requests+lxml

同一网页爬虫的四种实现方式

笔者以腾讯新闻首页的新闻信息抓取为例。

首页外观如下:

b41e80abd49b02e18cc79464bfc3790a3de405d3

比如说我们想抓取每个新闻的标题和链接,并将其组合为一个字典的结构打印出来。首先查看HTML源码确定新闻标题信息组织形式。

22aa8ef3ea4e0ffeb2950649ea35d940cfd16594

可以目标信息存在于em标签下a标签内的文本和href属性中。可直接利用requests库构造请求,并用BeautifulSoup或者lxml进行解析。

方式一:

requests+BeautifulSoup+select css选择器

 

# select method
import
requests
from
bs4
import
BeautifulSoup
headers = {
'User-Agent'
:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'
}
url =
'http://news.qq.com/'
Soup = BeautifulSoup(requests.get(url=url, headers=headers).text.encode(
"utf-8"
),
'lxml'
)
em = Soup.select(
'em[class="f14 l24"] a'
)
for
i
in
em:
title = i.get_text()
link = i[
'href'
]
print({
'标题'
: title,
'链接'
: link
})

很常规的处理方式,抓取效果如下:

b64356b212634581f22124281a8cff040d890c76

方式二:

requests+BeautifulSoup+find_all进行信息提取

 

# find_all method
import
requests
from
bs4
import
BeautifulSoup
headers = {
'User-Agent'
:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'
}
url =
'http://news.qq.com/'
Soup = BeautifulSoup(requests.get(url=url, headers=headers).text.encode(
"utf-8"
),
'lxml'
)
em = Soup.find_all(
'em'
, attrs={
'class'
:
'f14 l24'
})
for
i
in
em:
title = i.a.get_text()
link = i.a[
'href'
]
print({
'标题'
: title,
'链接'
: link
})

同样是requests+BeautifulSoup的爬虫组合,但在信息提取上采用了find_all的方式。效果如下:

2e76defa4ac94dd6787557d3d2eeb2f1644b975d

方式三:

requests+lxml/etree+xpath表达式

 

# lxml/etree method
import
requests
from
lxml
import
etree
headers = {
'User-Agent'
:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'
}
url =
'http://news.qq.com/'
html = requests.get(url = url, headers = headers)
con = etree.HTML(html.text)
title = con.xpath(
'//em[@class="f14 l24"]/a/text()'
)
link = con.xpath(
'//em[@class="f14 l24"]/a/@href'
)
for
i
in
zip(title, link):
print({
'标题'
: i[
0
],
'链接'
: i[
1
]
})

使用lxml库下的etree模块进行解析,然后使用xpath表达式进行信息提取,效率要略高于BeautifulSoup+select方法。这里对两个列表的组合采用了zip方法。效果如下:

460bb6b8ec006a0ac245a60b80d710994a1c0c06

方式四:

requests+lxml/html/fromstring+xpath表达式

 

# lxml/html/fromstring method
import
requests
import
lxml.html
as
HTML
headers = {
'User-Agent'
:
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36'
}
url =
'http://news.qq.com/'
con = HTML.fromstring(requests.get(url = url, headers = headers).text)
title = con.xpath(
'//em[@class="f14 l24"]/a/text()'
)
link = con.xpath(
'//em[@class="f14 l24"]/a/@href'
)
for
i
in
zip(title, link):
print({
'标题'
: i[
0
],
'链接'
: i[
1
]
})

跟方法三类似,只是在解析上使用了lxml库下的html.fromstring模块。抓取效果如下:

78a76da8d235f3e752072adfc296a74c768eefdf

很多人觉得爬虫有点难以掌握,因为知识点太多,需要懂前端、需要python熟练、还需要懂数据库,更不用说正则表达式、XPath表达式这些。其实对于一个简单网页的数据抓取,不妨多尝试几种抓取方案,举一反三,也更能对python爬虫有较深的理解。长此以往,对于各类网页结构都有所涉猎,自然经验丰富,水到渠成。

原文发布时间为:2018-08-26

本文作者:鲁伟

本文来自云栖社区合作伙伴“”,了解相关信息可以关注“”。

转载地址:http://hlqpo.baihongyu.com/

你可能感兴趣的文章
第一次作业-准备篇
查看>>
软件构架实践阅读笔记1
查看>>
光学字符识别OCR-4
查看>>
Testing - 软件测试知识梳理 - 测试模型
查看>>
[USACO13NOV]No Change
查看>>
android开发(35) fragment和actionbar组合使用。解决不触发onOptionsItemSelected的问题,获得actionbar 的默认 get icon...
查看>>
eclipse 配置CDT,eclipse配置C语言开发环境
查看>>
性能测试工具Locust+HttpRunner问题汇总
查看>>
hdu 5398 动态树LCT
查看>>
51nod 1376 最长递增子序列的数量(线段树)
查看>>
禅道的安装及学习
查看>>
Python图像处理库:PIL中Image,ImageDraw等基本模块介绍
查看>>
GridView + ImageSwitch 图片点击切换
查看>>
简单探讨可牛影像软件中具有肤质保留功能的磨皮算法及其实现细节。
查看>>
unity3d中使用Ngui实现幻灯片效果
查看>>
Android开源库--Asynchronous Http Client异步http客户端
查看>>
jq:get获取json数据并以表格形式生成到页面
查看>>
当您完成了所有修改,点击Save按钮保存。您现在已经创建了一个新的Simple Product了...
查看>>
win7开启硬盘AHCI
查看>>
Kafka消费异常处理
查看>>