本文主要介绍了Python爬虫入门之爬虫解析提取数据的四种方法,通过具体的内容向大家展现,希望对大家Python爬虫的学习有所帮助。

基础爬虫的固定模式

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

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

· requests+BeautifulSoup

· requests+lxml

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

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

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

可以目标信息存在于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 = ‘’ 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

})

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

· 方式二: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 = ‘’ 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的方式。效果如下:

方式三: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 = ‘’ 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方法。效果如下:

方式四: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 = ‘’ 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模块。抓取效果如下:

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

爬取网页数据用正则表达式的话,可以直接从网页源代码文本中匹配,但出错率较高,且熟悉正则表达式的使用也比较难,需要经常翻阅文档。

实际爬取数据大多基于 HTML 结构的 Web 页面,网页节点较多,各种层级关系。可以考虑使用 Xpath 解析器、BeautifulSoup解析器、PyQuery CSS解析器抽取结构化数据,使用正则表达式抽取非结构化数据。

Xpath:可在 XML 中查找信息;支持 HTML 的查找 ;通过元素和属性进行导航,查找效率很高。在学习 Selenium 以及 Scrapy 框架中也都会用到。

BeautifulSoup:依赖于 lxml 的解析库,也可以从 HTML 或 XML 文件中提取数据。

PyQuery:Python仿照 jQuery 严格实现,可以直接解析 DOM 节点的结构,并通过 DOM 节点的一些属性快速进行内容提取。

对于爬取网页结构简单的 Web 页面,有些代码是可以复用的,如下所示:

from fake_useragent import UserAgent

随机产生请求头

ua = UserAgent(verify_ssl=False, path=‘fake_useragent.json’)

def random_ua():

headers = {

“Accept-Encoding”: “gzip”,

“User-Agent”: ua.random

}

return headers

伪装请求头,并可以随机切换,封装为函数,便于复用。

def scrape_html(url):

resp = requests.get(url, headers=random_ua())

print(resp.status_code, type(resp.status_code))

print(resp.text)

if resp.status_code == 200:

return resp.text

else:

logging.info(‘请求网页失败’)

请求网页,返回状态码为 200 说明能正常请求,并返回网页源代码文本。

文章来源:网络 版权归原作者所有

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系小编,我们将立即处理

Python爬虫入门之爬虫解析提取数据的四种方法相关推荐

  1. 爬虫解析提取数据的四种方法

    一.分析网页 以经典的爬取豆瓣电影 Top250 信息为例.每条电影信息在 ol class 为 grid_view 下的 li 标签里,获取到所有 li 标签的内容,然后遍历,就可以从中提取出每一条 ...

  2. pandas提取数据的6种方法

    pandas提取数据的6种方法 pandas是Python数据分析必备工具,它有强大的数据清洗能力,往往能用非常少的代码实现较复杂的数据处理. 五个方面: 比较运算:.<.>.>=. ...

  3. java构造和解析json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  4. java json解析 代码_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  5. Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  6. java构建json_Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  7. (第5讲)同一用户的不同页面共享数据的四种方法

    同一用户的不同页面共享数据的四种方法 1.cookie 2.sendRedirect 3.session 4.隐藏表单提交 1.cookie 服务器在客户端保存的用户信息,比如登录名,密码等就是coo ...

  8. 全网最详细SoilGrid数据的下载与提取(含四种方法)

    方法一:R语言 (可直接提取并导出数据,快慢依电脑性能和网速而定...) soil_world在R中的使用指南(可以直接调用SG的数据) 代码如下 ///感谢zihao师兄鼎力相助 install.p ...

  9. SQL Server数据库中批量导入数据的四种方法总结

    在软件项目实施的时候,数据导入一直是项目人员比较头疼的问题.其实,在SQL Server中集成了很多成批导入数据的方法.有些项目实施顾问头疼的问题,在我们数据库管理员眼中,是小菜一碟.现在的重点就是, ...

最新文章

  1. 推荐CUDA程序优化的15个策略
  2. 第六章连接和分组查询
  3. 时间格式转换2020-04-09T23:00:00.000+08:00
  4. PHP逻辑运算符如何写,PHP 逻辑运算符
  5. 上海高考女生计算机专业,@2020高考:女生最多的15个专业,一辈子的好友就在这里...
  6. 对报表模型项应用安全筛选器
  7. codeforces-constructive algorithms(构造算法.)
  8. 分布式锁没那么难,手把手教你实现 Redis 分布锁!|保姆级教程
  9. 电容麦克风测试软件,大家都在用的测试话筒大搜罗
  10. java万年历报告_java万年历设计报告
  11. 用msicuu2.exe卸载office可能遇到的问题及解决办法
  12. 说一说协议生成器 - Ricequant米筐量化
  13. 南京市六合区原副区长焦晓英一行莅临云创
  14. java ppt控件_Java版PPT操作控件Spire.Presentation v2.12.2新版来袭!支持获取具有超链接的目标幻灯片...
  15. linux的./configure --prefix的作用
  16. 2013年网站内容建设新趋势
  17. Jia This 学习
  18. Linux网络嗅探器实验报告,分析网络嗅探器实验报告
  19. 5款免费的优秀数据可视化工具推荐
  20. 深度缓冲中的深度值计算及可视化

热门文章

  1. 项目管理(二)项目阶段与项目生命周期
  2. 【16.10更新】神器再现!百度云网盘批量高速下载 Chrome插件+IDM
  3. 堆垛实训报告总结_叉车实训总结
  4. Amazon AppStream服务介绍
  5. 问题:npm如何设置仓库地址?
  6. Fastadmin和Easywechat
  7. Android Sandbox(沙箱)开源工具介绍
  8. 2018 AFCTF 可怜的RSA
  9. printf及无符号型整数
  10. Lua不同类型变量做比较时的问题