版权声明:随心所欲、无欲无求! https://blog.csdn.net/qq_32662595/article/details/85113851
1、 提取网页中的数据,一些现有的库可达到目的包括:
- BeautifulSoup 是在程序员间非常流行的网页分析库,它基于HTML代码的结构来构造一个Python对象, 对不良标记的处理也非常合理,但它有一个缺点:慢
-
- lxml 是一个基于 ElementTree (不是Python标准库的一部分)的python化的XML解析库(也可以解析HTML)。
2、 Scrapy提取数据有自己的一套机制。它们被称作选择器(seletors),因为他们通过特定的 XPath 或者 CSS 表达式来“选择” HTML文件中的某个部分。
- XPath 是一门用来在XML文件中选择节点的语言,也可以用在HTML上。
- CSS 是一门将HTML文档样式化的语言。
3、 Scrapy selector是以 文字(text) 或 TextResponse 构造的 Selector 实例。 其根据输入的类型自动选择最优的分析方法(XML vs HTML)。
```
选择器:
xpath(query)
寻找可以匹配xpath query 的节点,并返回 SelectorList 的一个实例结果,单一化其所有元素。列表元素也实现了 Selector 的接口。
exreact():
串行化并将匹配到的节点返回一个unicode字符串列表。 结尾是编码内容的百分比。
css(query)
应用给定的CSS选择器,返回 SelectorList 的一个实例。
query 是一个包含CSS选择器的字符串
re(regex)
应用给定的regex,并返回匹配到的unicode字符串列表。、
regex 可以是一个已编译的正则表达式,也可以是一个将被 re.compile(regex) 编译为正则表达式的字符串。
HTML源码:
<html>
<head>
<base href='http://example.com/' />
<title>Example website</title>
</head>
<body>
<div id='images'>
<a href='image1.html'>Name: My image 1 <br /><img src='image1_thumb.jpg' /></a>
<a href='image2.html'>Name: My image 2 <br /><img src='image2_thumb.jpg' /></a>
<a href='image3.html'>Name: My image 3 <br /><img src='image3_thumb.jpg' /></a>
<a href='image4.html'>Name: My image 4 <br /><img src='image4_thumb.jpg' /></a>
<a href='image5.html'>Name: My image 5 <br /><img src='image5_thumb.jpg' /></a>
</div>
</body>
</html>
-
构造选择器
from scrapy.selector import Selector from scrapy.http import HtmlResponse response = HtmlResponse(url='http://baidu.com', body=body,encoding="utf8") Selector(response=response).xpath('//span/text()').extract() # response对象以 .selector 属性提供了一个selector response.selector.xpath('//span/text()').extract()
-
使用选择器
response.selector.xpath('//title/text()') [<Selector (text) xpath=//title/text()>] response.css('title::text') [<Selector (text) xpath=//title/text()>]
-
嵌套选择器
links = response.xpath('//a[contains(@href, "image")]') links.extract() 结果: [u'<a href="image1.html">Name: My image 1 <br><img src="image1_thumb.jpg"></a>', u'<a href="image2.html">Name: My image 2 <br><img src="image2_thumb.jpg"></a>', u'<a href="image3.html">Name: My image 3 <br><img src="image3_thumb.jpg"></a>', u'<a href="image4.html">Name: My image 4 <br><img src="image4_thumb.jpg"></a>', u'<a href="image5.html">Name: My image 5 <br><img src="image5_thumb.jpg"></a>']
-
结合正则表达式使用选择器
response.xpath('//a[contains(@href, "image")]/text()').re(r'Name:\s*(.*)') [u'My image 1', u'My image 2', u'My image 3', u'My image 4', u'My image 5']