我正在使用scrapy来获取本网站的信息
我想要抓取的代码具有以下结构:
<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,等等,我想要的是选择第一个标题和第一个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']")
后代的信息。
您应该对嵌套属性使用相对 xpath 选择器
此外,您没有以正确的方式为站点指定选择器。
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
试试这个:不要在第一个选择器之后使用//
,即格式化字符串,例如
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