scrapy 解析文档
来源:互联网 发布:插画培训班 知乎 编辑:程序博客网 时间:2024/06/07 07:07
示例
scrapy类的实现位于scrapy.selector 模块
from scrapy.selector import Seletorseletor=Seletor(response=response)seletor_list=seletor.xpath("//h1") #选中文档中所有的h1for sel in seletor_list: print sel.xpath('./text()')selector.xpath('.//ul').css('li').xpath('./text()')
具体的可以参考github源代码:https://github.com/wu-yy/scrapy_origin
提取数据的函数
调用Seletor或者SeletorList对象的以下方法:
extract()
re()
extract_first() seletorList 专有
re_first() selectorList 专有
sl=selector.xpath(.//li/text())sl[0].extract() # 返回第一个数据sl.extract() #返回所有数据的数组sl.extract_first() #返回第一个数据
有些时候需要用正则表达式提取选中内容的某部分,可以使用re方法。
text='。。。省略内容'selector=Seletor(text=text)selector.xpath('.//li/b/text()').re('\d+\.\d+') #只提取数字部分
Response 内置Selector对象
可以直接使用 response.xpath() 或者response.css()
response.xpath('.//h1/text()').extract()或者respnse.css(li::text).extract()
xpath
Xpath 是XML路径语言,它是确定xml文档中某部分位置的语言。
xml文档,html属于xml。
xpath 还提供了许多函数,如数字、字符串、时间、日期、统计等。
string 函数:返回字符串的一个整字符串
from scrapy.selector import Selectortext='<a href="#">Click here to go to the <strong> Next Page </strong></a>'sel=Selecor(text=text)sel.xpath(/html/body/a//text()).extract()#将得到两个子串['Click here to go to the','Next Page']sel.xpath('string(/html/body/a)') #将得到一个整字符串 ['Click here to go to the Next Page']
contains(str1,str2) 判断str1 是否包含str2
sel.xpath('//p[contains(@class,"small")]')#选择class属性中包含“small”的p元素
更多的Xpath的详细内容可以看Xpath的文档 https://www.w3.org/TR/xpath
css选择器
css语法比Xpath简单一些,但不如xpath功能强大,实际上我们调用css方法时,python库的cssselect将css选择器转换为xPath表达式。
css的一些基本语法
例如:
[ATTR] response.css('[style]')[ATTR=value] respnse.css('[id=myhome]')
阅读全文
1 0
- scrapy 解析文档
- [Python][Scrapy] Scrapy 官方文档
- Scrapy 0.22 文档翻译 之 Scrapy一瞥
- scrapy文档学习笔记(scrapy tutorial)
- scrapy爬虫-------命令解析
- Scrapy 结构图解析
- scrapy 官方文档(入门必备)
- scrapy学习笔记--解析结果存储
- python使用scrapy解析js示例
- scrapy学习(三) crawlspider源码解析
- scrapy
- Scrapy
- scrapy
- Scrapy
- Scrapy
- Scrapy
- Scrapy
- Scrapy
- c#机房合作版---命名规范
- 为什么jsp是servlet?
- C++指针与函数
- maven重命名war插件下的jar名称
- hibernate简答题
- scrapy 解析文档
- 从 Zero 到 Hero ,一文掌握 Python
- WCF NetTcpBinding 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- [面试]Nginx状态码499的原因及解决办法
- 被我忽略的知识点
- Linux之Redhat中dns配置教程
- 欢迎使用CSDN-markdown编辑器
- HDU 2199 Can you solve this equation?
- java实现图片比较