【问题标题】:I can't scrape div parameters of the website (scrapy)我无法抓取网站的 div 参数(scrapy)
【发布时间】:2014-01-21 10:13:57
【问题描述】:

我正在使用scrapy来获取这个website的信息

我要抓取的代码结构如下:

<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']") 的后代信息。

【问题讨论】:

    标签: python html web-scraping scrapy


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

      • 如果我这样做,我不会得到任何结果:{'title':[], 'url':[], 'when':[]}
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多