python爬虫定位元素

核心提示来源:早起Python 作者:陈熹在使用Python本爬虫采集数据时,一个很重要的操作就是如何从请求到的网页中提取数据,而正确定位想要的数据又是第一步操作。本文将对比几种 Python 爬虫中比较常用的定位网页元素的方式供大家学习“传统Be

来源:早起Python

作者:陈

使用Python爬虫采集数据时,一个很重要的操作就是如何从请求的网页中提取数据,而正确定位所需数据是第一步。

本文将比较几种Python爬虫中定位网页元素的常用方式,供大家学习。

"传统的BeautifulSoup操作基于BeautifulSoup的CSS选择器的XPath正则表达式"

http://bang . Dangdang . com/books/best sellers/01 . 00 . 00 . 00 . 00 . 00-24小时-0-0-1-1

我们以第一页的20本书的书名为例。首先确定网站没有反抓取措施,是否可以直接返回要解析的内容:

导入请求URL = ' http://bang . Dangdang . com/books/best sellers/01 . 00 . 00 . 00 . 00 . 00-24小时-0-0-1-1 ' response = requests . get . text print

仔细检查后发现,返回的内容中有所有需要的数据,也就是说防攀爬措施不需要特别考虑。

检查网页元素后,可以发现书目信息包含在li中,属于ul,带有class bang _ list clear fix bang _ list _ mode。

进一步考察还可以揭示书名的对应位置,这是各种分析方法的重要依据。

1.传统美容手术

经典的BeautifulSoup方法使用from bs4导入BeautifulSoup,然后通过soup = BeautifulSoup将文本转换成特定的规范结构,并使用find series方法进行分析。代码如下:

导入请求

从bs4导入beautiful soupurl = ' http://bang . Dangdang . com/books/best sellers/01 . 00 . 00 . 00 . 00 . 00-24 hours-0-0-1-1 ' response = requests . Get . text def BS _ for _ parse:soup = beautiful soup li_list = soup . find . find _ all #在锁定ul:title = li . find[' title ']#后在Li _ list中为Li获取20 Li逐个解析它们以获取书名打印if _ _ name

成功获取20个标题,有些比较冗长,可以用正则或其他字符串方法处理,本文就不详细介绍了。

2.基于BeautifulSoup的CSS选择器

这个方法其实就是PyQuery中CSS选择器在其他模块中的移植和使用,用法也差不多。有关CSS选择器的详细语法,请参考:

http://www.w3school.com.cn/cssref/css_selectors.asp

因为是基于BeautifulSoup,所以导入的模块和文本结构转换是一致的:

来自bs4的导入请求import beautiful soup URL = ' http://bang . Dangdang . com/books/best sellers/01 . 00 . 00 . 00 . 00 . 00-24小时-0-0-1-1 ' response = requests . get . text def CSS _ for _ parse:soup = beautiful soup printif _ _ name _ _ = ' _ _ main _ _ ':CSS _ for _ parse

然后通过。

汤,精选

辅以特定的CSS语法来获取特定的内容,基础仍然是对元素的仔细检查和分析:

从bs4导入BeautifulSoupfrom lxml导入html URL = ' http://bang . Dangdang . com/books/best sellers/01 . 00 . 00 . 00 . 00 . 00-24 hours-0-0-1-1 ' response = requests . get . text def CSS _ for _ parse:soup = beautiful soup Li _ list = soup . select for Li _ list:title = Li。select[0][' title ']printif _ _ name _ _ = = ' _ _ main _ _ ':CSS _ for _ parse

3.路径语言

XPath是XML路径语言,这是一种用于确定XML文档的一部分的位置的计算机语言。如果使用Chrome浏览器,建议安装。

XPath助手

插件会大大提高编写XPath的效率。

之前的爬虫文章基本都是基于XPath的,大家都比较熟悉,所以直接给出代码:

从lxml导入请求html URL = ' http://bang . Dangdang . com/books/best sellers/01 . 00 . 00 . 00 . 00 . 00-24小时-0-0-1-1 ' response = requests . get . text def XPath _ for _ parse:selector = html . from string books = selector . XPath for books in books:t title = book . XPath[0]printif _ _ name _ _ = ' _ _ main _ _ ':XPath _ for _ parse

4.正则表达式

如果不熟悉HTML语言,前面的解析方法会比较困难。在这里,我们还提供了一个通用的解析解决方案:正则表达式,只需要关注文本本身的特殊语法,就可以获得具有特定规则的相应内容。依赖模块是re对直接返回的内容的第一次重新观察。必选文字前后有何特别之处:

导入请求import reurl = ' http://bang . Dangdang . com/books/best sellers/01 . 00 . 00 . 00 . 00 . 00-24小时-0-0-1-1 ' response = requests . get . text print

我相信通过观察几个数字就有答案了:

书名隐藏在上面的字符串中,所包含的URL链接末尾的数字会随着书名的变化而变化。

这里分析后可以写出正则表达式:

导入请求import reurl = ' http://bang . Dangdang . com/books/best sellers/01 . 00 . 00 . 00 . 00 . 00-24小时-0-0-1-1 ' response = requests . get . text def re _ for _ parse:reg = ' ' for标题in re . find all:printif _ _ name _ _ = ' _ _ main _ _ ':re _ for _ parse

可以发现,有规律的书写是最简单的,但是你需要对有规律的规则非常熟练。所谓正则解好!

当然,无论哪种方式都有其适用场景,在实际操作中,我们还需要分析网页结构来判断如何高效定位元素。最后附上本文介绍的四种方法的完整代码,可以自己操作加深体验。

从bs4导入BeautifulSoupfrom lxml导入html import reurl = ' http://bang . Dangdang . com/books/best sellers/01 . 00 . 00 . 00 . 00 . 00-24 hours-0-0-1-1 ' response = requests . get . text def bs _ for _ parse:soup = beautiful soup Li _ list = soup . find . find _ all for Li in Li _ list:titl e = Li . find[' title ']print def CSS _ for _ parse:soup

 
友情链接
鄂ICP备19019357号-22