请教关于 lxml 的用法

2017-09-27 20:20:48 +08:00
 saximi
在爬虫中,用 Request()方法返回的 response 对象,请问要如何与 lxml 结合在一起使用呢?
例如 response.xpath('//div[@class="A"]') 这个语句要改为用 reponse 和 lxml 表示该怎么写呢?
谢谢
2608 次点击
所在节点    Python
9 条回复
TimePPT
2017-09-27 21:16:27 +08:00
billion
2017-09-27 21:54:22 +08:00
如果你非要字典有 Scrapy 的情况下还手动用 lxml 的话,

```python
from lxml.html import fromstring
selector = fromstring(response.body.decode())
selector.xpath('//div[@class="A"]')
```
saximi
2017-09-27 23:57:46 +08:00
@billion 我初学爬虫,想用一些最主流的模式和包来实现功能。我知道 Scrapy 是最好用的架构,所以肯定要用的,另外据说 lxml 是 Python 语言里和 XML 以及 HTML 工作的功能最丰富和最容易使用的库。所以我才产生了如何在 Scrapy 下使用 lxml 的念头,当然这在各位前辈看来却可能是很不合理的搭配。
按照您的意思,是不是既然使用了 Scrapy 架构,就用 xpath 来解析 XML 和 HTML 即可,不要再使用 lxml 了?
谢谢指点!
zhusimaji
2017-09-28 08:52:50 +08:00
还有一个强大的库 bs4
mentalkiller
2017-09-28 11:17:12 +08:00
saximi
2017-09-28 20:14:33 +08:00
@mentalkiller
@zhusimaji 谢谢指点,我也有了解过 BS4,看了某些材料说除了正则,效率最快的是 lxml,BS4 虽然很友好但是效率相对较低,是这样么?
yucongo
2017-09-29 00:06:10 +08:00
趁早改投 pyquery 门下吧……
zhusimaji
2017-09-29 08:56:25 +08:00
@saximi 怎么会效率低,你可以使用不同解析器去解析 html,比如你提到的 lxml 都是可以使用的,所以效率问题不大
billion
2017-09-29 19:01:08 +08:00
@saximi Scrapy 本身就自动会使用 lxml,这是它的一个依赖包。Scrapy 本来已经自动使用 lxml 帮你处理好了,你直接写 XPath 就好了,可你偏要自己再用 lxml 处理一遍。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/394154

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX