怎样使用scrapy爬取js动态生成的数据

怎样使用scrapy爬取js动态生成的数据,第1张

这个方法只是获取页面源码;你的要求是获取DOM结构;

有一个方式,使用lxml库,先使用selenium获取整个html的DOM,再把Dom转存到lxml对象,这样的方式可以获取到正html Dom tree,下面例子:

def parse_from_unicode(unicode_str): #html DOM tree to lxml 格式

utf8_parser = lxmletreeHTMLParser(encoding='utf-8')

s = unicode_strencode('utf-8')

return lxmletreefromstring(s, parser=utf8_parser)

def parse(request):

driver = webdriverPhantomJS()

html =driverfind_element_by_name('html')

lxml_html=parse_from_unicode(html)

kk=lxml_htmlxpath('//tr') #使用xpath匹配

之前写过相对父元素及下一个兄弟元素的方法。

这次补充一下xpath相对节点位置查找元素的所有方法。例子就不举了,自己可以去练练。

xpath相对节点查找方法:

1、xpath('/ancestor::')

查找当前节点的所有先辈节点,即父节点或祖父节点

2、xpath('/ancestor-or-self::')

查找当前节点的所有先辈节点以及本身

3、xpath('/attribute::')

获取当前节点的所有属性

4、xpath('/child::')

查找当前节点的所有子节点

5、xpath('/descendant::')

获取当前节点的所有后代节点,即子节点、孙节点

6、xpath('/following::')

获取当前节点结束标签后的所有节点

7、xpath('/following-sibing::')

获取当前节点的下一个兄弟节点

8、xpath('/parent::')

获取当前节点的父节点

9、xpath('/preceding::')

获取当前节点开始标签前的所有节点

10、xpath('/preceding-sibing::')

获取当前节点的上一个兄弟节点

11、xpath('/self::')

选取当前节点

大概也就这么多,这些方法非常实用,特别是有些元素通过自己的属性无法查找到的时候就需要通过相对节点的位置来查找。

使用时先安装 lxml 包

开始使用 #

和beautifulsoup类似,首先我们需要得到一个文档树

把文本转换成一个文档树对象

from lxml import etreeif __name__ == '__main__':doc='''

把文件转换成一个文档树对象

fromlxmlimportetree# 读取外部文件 indexhtmlhtml = etreeparse('/indexhtml')result = etreetostring(html, pretty_print=True)#pretty_print=True 会格式化输出print(result)

均会打印出文档内容

节点、元素、属性、内容 #

xpath 的思想是通过 路径表达 去寻找节点。节点包括元素,属性,和内容

元素举例

html --->div --->

这里我们可以看到,这里的元素和html中的标签一个意思。单独的元素是无法表达一个路径的,所以单独的元素不能独立使用

路径表达式 #

/  根节点,节点分隔符,//  任意位置  当前节点  父级节点@  属性

通配符 #

  任意元素@  任意属性node()  任意子节点(元素,属性,内容)

谓语 #

使用中括号来限定元素,称为谓语

//a[n] n为大于零的整数,代表子元素排在第n个位置的 元素//a[last()]  last()  代表子元素排在最后个位置的 元素//a[last()-]  和上面同理,代表倒数第二个//a[position()<3] 位置序号小于3,也就是前两个,这里我们可以看出xpath中的序列是从1开始//a[@href]    拥有href的 元素//a[@href='内置很多函数。更多函数查看 >

以上就是关于怎样使用scrapy爬取js动态生成的数据全部的内容,包括:怎样使用scrapy爬取js动态生成的数据、通过xpath相对节点位置查找元素、python使用xpath(超详细)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9816745.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存