文档章节

用python写爬虫(二)——数据提取方式

s
 silence_cho
发布于 2016/10/30 17:07
字数 778
阅读 20
收藏 0

通过Resquest或urllib2抓取下来的网页后,一般有三种方式进行数据提取:正则表达式、beautifulsoup和lxml,留下点学习心得,后面慢慢看。

  1. 正则表达式

参考文档: 正则表达式30分钟入门教程

看完文档后理解正则表达式的基本概念就行,然后知道贪婪匹配和懒惰匹配的区别。实际运用过程中用的最多的就两种( .*?) 和 (d+) 分别用来匹配任意字符和数字,?表示懒惰匹配。

           

pattern=re.compile(string[,flag])  
#以下为匹配所用函数
re.match(pattern, string[, flags])
re.search(pattern, string[, flags])
re.split(pattern, string[, maxsplit])
re.findall(pattern, string[, flags])
re.finditer(pattern, string[, flags])
re.sub(pattern, repl, string[, count])
re.subn(pattern, repl, string[, count]

flags:参数flag是匹配模式,取值可以使用按位或运算符’|’表示同时生效,比如re.I | re.M
  re.I(全拼:IGNORECASE): 忽略大小写(括号内是完整写法,下同)
 re.M(全拼:MULTILINE): 多行模式,改变'^'和'$'的行为(参见上图)
 re.S(全拼:DOTALL): 点任意匹配模式,改变'.'的行为
 re.L(全拼:LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
 re.U(全拼:UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
re.X(全拼:VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释

    2.beautifulsoup

参考文档:beautiful soup 4.2.0中文文档

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment 。主要理解Tag,Tag与html中的tag相同,其有两个最重要的属性name和attribute, 分别通过tag.name和tag.attrs来调用。方法中应用最多的的就是fin() 和find_all()

find_all( name , attrs , recursive , text , **kwargs )

soup.find_all("a")
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

find( name , attrs , recursive , text , **kwargs

soup.find("head").find("title")
# <title>The Dormouse's story</title>

      3 lxml

lxml最麻烦的就是安装的时候容易现各种问题,如果pip install lxml 出现问题,推荐安装方法:

(1)安装wheel :pip install wheel

(2)下载与自己系统匹配的wheel(如下),注意别改下载文件的文件名,下载链接http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

(3) 进入.whl所在的文件夹,执行命令:pip install 带后缀的完整文件名

关于lxml的使用,一般要将抓取的html通过fromstring转换,再进行匹配选择元素

参考文档:http://lxml.de/3.6/lxmldoc-3.6.4.pdf(官方英文)

elements and element tree

http://lxml.de/tutorial.html

(1)html转换:fromstring()

import lxml.html

tree=lxml.html.fromstring(tree)    #fromstring() 将string转换成xml,tostring()将xml转换成string

(2)元素匹配:元素选择lxml有几种不同的方法,有XPath选择器和类似beautiful soup 的 find()方法,CSS选择器等。

XPath参考:用lxml解析html

                    XPath语法

                   Python中利用xpath解析HTML

CSS参考:CSSSelector

                   【Selenium专题】元素定位之CssSelector

                     Selenium - CSS Selector

 

 

 

 

 

© 著作权归作者所有

s
粉丝 0
博文 6
码字总数 5130
作品 0
武汉
私信 提问
爬虫入门教程⑧— BeautifulSoup解析豆瓣即将上映的电影信息

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间. 这是...

皮卡丘丶
2018/05/11
0
0
2018Python网络爬虫与文本挖掘技术培训班

各科研院所单位: 随着互联网的发展,网络信息呈现指数式增长,要在短时间内获取大量信息,网络爬虫无疑是一种最适合的方法。通过爬虫获取的海量信息,我们可以对其进行进一步的分析:市场预...

朱苗
2018/06/07
174
0
2018年6月份Python网络爬虫与文本挖掘

各科研院所单位: 随着互联网的发展,网络信息呈现指数式增长,要在短时间内获取大量信息,网络爬虫无疑是一种最适合的方法。通过爬虫获取的海量信息,我们可以对其进行进一步的分析:市场预...

博宏科睿
2018/05/31
0
0
手把手教你写网络爬虫(1):网易云音乐歌单

原文出处:拓海 大家好,《手把手教你写网络爬虫》连载开始了!在笔者的职业生涯中,几乎没有发现像网络爬虫这样的编程实践,可以同时吸引程序员和门外汉的注意。本文由浅入深的把爬虫技术和...

拓海
2018/04/27
0
0
“Python爬虫与文本实例技术与应用”培训班通知

各科研院所单位: 随着互联网的发展,网络信息呈现指数式增长,要在短时间内获取大量信息,网络爬虫无疑是一种最适合的方法。通过爬虫获取的海量信息,我们可以对其进行进一步的分析:市场预...

会务组周恒
2018/06/07
81
0

没有更多内容

加载失败,请刷新页面

加载更多

Java的战争

本文来自微信公众号: 金捷幡(ID:jin-jiefan) ,作者:金捷幡,封面:拉里·埃里森(东方IC) 2019年5月,彻底撕破脸的特朗普掀起对华为的战争,谷歌被迫吊销了华为的Android授权。开源软...

Java领航员
36分钟前
1
0
超详细的LM3414MRX/NOPB规格参数介绍就在这里

超详细的LM3414MRX/NOPB规格参数介绍就在这里 描述 LM3414和LM3414MRX/NOPB是具有1-A 60 W(1)共阳极功能的恒流降压LED驱动器。它们适用于驱动单串3-W HBLED,效率高达96%。它们可接受4.5...

不能吃肉的仙女
43分钟前
1
0
Eclipse国内镜像源配置方法

Table of Contents 我们在国内从官网下载Eclipse以及插件非常慢,那么,有没有方法变快呢? 有,那就是使用国内的公开镜像源替换官方源。 1 下载Eclipse 首先,我们看一个链接地址: http:/...

求神
今天
5
0
java 请求服务

一.第一种基于java web http 请求服务,必须用tomcat 容器启动才能对外提供服务 在maven 工程中pox 文件导入jar <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>h......

zaolonglei
今天
5
0
HDFS工作机制——自开发分布式数据采集系统

需求描述: 在业务系统的服务器上,业务程序会不断生成业务日志(比如网站的页面访问日志) 业务日志是用log4j生成的,会不断地切出日志文件,需要定期(比如每小时)从业务服务器上的日志目...

须臾之余
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部