我无法刮掉网站的div参数(scrapy)

时间:2014-01-03 16:56:52

标签: python html web-scraping scrapy

我正在使用scrapy来获取此website

的信息

我想要scrape的代码具有以下结构:

<div id="llista-resultats">
 <div>
  <h3>
   <a href="URL"> Title </a>
  <div class="dades">
   <dl>
    <dt> </dt>
    <dd> </dd>
    ...
  </div>
 <div>
  And repetar again  

我已经完成了测试并且我知道如何获取信息,但是我对以下代码的问题是我得到了所有的标题,然后是所有的URL等我想要的是选择第一个标题第一个网址。

class BcnSpider(CrawlSpider):
    name = 'bcn'
    allowed_domains = ['guia.bcn.cat']
    start_urls = ['http://guia.bcn.cat/index.php?pg=search&q=*:*']

    def parse(self, response):
    sel = Selector(response)
    sites = sel.xpath("//div[@id='llista-resultats']")
    items = []
    for site in sites:
        item = BcnItem()
        item['title'] = site.xpath("//div[@id='llista-resultats']//h3/a/text()").extract()
        item['url'] = site.xpath("//div[@id='llista-resultats']//h3/a/@href").extract()
        item['when'] = site.xpath("//div[@id='llista-resultats']//div[@class='dades']/dl/dd/text()").extract()
        items.append(item)
    return items

我认为错误是因为我在每个项目上使用//,但我没有获得sites = sel.xpath("//div[@id='llista-resultats']")后代的信息。

2 个答案:

答案 0 :(得分:1)

您应该将relative xpath selectors用于嵌套属性

此外,您没有正确指定网站选择器。

sites = sel.xpath("//div[@id='llista-resultats']/div")
items = []
for site in sites:
    item = BcnItem()
    item['title'] = site.xpath("h3/a/text()").extract()
    item['url'] = site.xpath("h3/a/@href").extract()
    item['when'] = site.xpath("div[@class='dades']/dl/dd/text()").extract()
    items.append(item)
return items

答案 1 :(得分:0)

试试这个: 不要在第一个选择器之后使用//,即格式化字符串,如

item['title'] = site.xpath("//div[@id='llista-resultats']/h3/a/text()").extract()
item['url'] = site.xpath("//div[@id='llista-resultats']/h3/a/@href").extract()
item['when'] = site.xpath("//div[@id='llista-resultats']/div[@class='dades']/dl/dd/text()").extract()
    items.append(item)
return items