scrapy爬虫多个条件获取字段

来源:互联网 发布:投资平台商业模式知乎 编辑:程序博客网 时间:2024/05/16 11:42
[root@bogon Desktop]# scrapy shell 'https://ssl.700du.cn/prod/GAB.html'

>>> sel.xpath('//div[contains(@class,"tb-wrap")]/ul/li[contains(div/text(),"'+u'保险公司'+'")]/div/a/text()|//div[contains(@class,"tb-wrap")]/ul/li[contains(div/text(),"'+u'保险公司'+'")]/div/a/span/text()').extract()

表达式 描述nodename选取此节点的所有子节点。/从根节点选取。//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。.选取当前节点。..选取当前节点的父节点。@选取属性。


路径表达式 结果//book/title | //book/price选取 book 元素的所有 title 和 price 元素。//title | //price选取文档中的所有 title 和 price 元素。/bookstore/book/title | //price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。


scrapy内部支持更简单的查询语法,帮助我们去html中查询我们需要的标签和标签内容以及标签属性。下面逐一进行介绍:

  • 查询子子孙孙中的某个标签(以div标签为例)://div
  • 查询儿子中的某个标签(以div标签为例):/div
  • 查询标签中带有某个class属性的标签://div[@class='c1']即子子孙孙中标签是div且class=‘c1’的标签
  • 查询标签中带有某个class=‘c1’并且自定义属性name=‘alex’的标签://div[@class='c1'][@name='alex']
  • 查询某个标签的文本内容://div/span/text() 即查询子子孙孙中div下面的span标签中的文本内容
  • 查询某个属性的值(例如查询a标签的href属性)://a/@href

CrawlSpider样例

接下来给出配合rule使用CrawlSpider的例子:

import scrapyfrom scrapy.contrib.spiders import CrawlSpider, Rulefrom scrapy.contrib.linkextractors import LinkExtractorclass MySpider(CrawlSpider):name = 'example.com'allowed_domains = ['example.com']start_urls = ['http://www.example.com']rules = (# 提取匹配 'category.php' (但不匹配 'subsection.php') 的链接并跟进链接(没有callback意味着follow默认为True)Rule(LinkExtractor(allow=('category\.php', ), deny=('subsection\.php', ))),# 提取匹配 'item.php' 的链接并使用spider的parse_item方法进行分析Rule(LinkExtractor(allow=('item\.php', )), callback='parse_item'),)def parse_item(self, response):self.log('Hi, this is an item page! %s' % response.url)item = scrapy.Item()item['id'] = response.xpath('//td[@id="item_id"]/text()').re(r'ID: (\d+)')item['name'] = response.xpath('//td[@id="item_name"]/text()').extract()item['description'] = response.xpath('//td[@id="item_description"]/text()').extract()return item

该spider将从example.com的首页开始爬取,获取category以及item的链接并对后者使用 parse_item方法。 当item获得返回(response)时,将使用XPath处理HTML并生成一些数据填入  Item 中。

http://www.tuicool.com/articles/quIz2a


参考文档:http://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/shell.html#topics-shell

                    http://www.bkjia.com/Androidjc/966774.html#top


保险公司姓名没有爬取到的 原因:









0 0
原创粉丝点击