如何获取每个标签的数据?
How to get the data for each tag?
我正在抓取此页面以获取每个广告的数据:
http://www.cars2buy.co.uk/business-car-leasing/Abarth/695C/?
每个Ad都在一个class叫content里,所以我写了一个for循环获取所有contentclasses,然后拼命获取每个content的数据"Ad",但是我在每次循环迭代中获取所有内容的数据。这是我在 scrapy shell 中的代码:
scrapy shell "http://www.cars2buy.co.uk/business-car-leasing/Abarth/695C/"
for content in response.xpath('//*[@class="pitem"]/div[1]/div[2]/div[1]'):
print content.xpath('//*[@class="detail"]/p/text()[2]').extract()
但输出是:
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
这意味着它在每次迭代中获取所有标签的数据!!
我需要输出为:
48 months
48 months
48 months
36 months
48 months
48 months
48 months
48 months
48 months
36 months
您可以直接使用 xpath 来 select 具有 class="detail" 的元素,像这样更改您的代码:
In [5]: for content in response.xpath('//*[@class="detail"]/p/text()[2]').extrac
t():
...: print content
...:
48 months
48 months
48 months
36 months
48 months
48 months
48 months
48 months
48 months
36 months
要获取每个广告的数据,您可以使用以下代码:
def parse(self, response):
for detail in response.xpath('//div[@class="detail"]/p'):
item = dict()
item['term'] = detail.xpath('text()[2]').extract_first()
item['mileage'] = detail.xpath('text()[4]').extract_first()
item['payment'] = detail.xpath('text()[6]').extract_first()
item['fee'] = detail.xpath('text()[8]').extract_first()
yield item
# {'term': ' 48 months', 'mileage': ' 10,000', 'payment': ' £2,227.86 + VAT', 'fee': ' £249.00 + VAT'}
请注意,您需要使用 extract_first()
方法,因为 extract()
return 是一个列表。
我正在抓取此页面以获取每个广告的数据: http://www.cars2buy.co.uk/business-car-leasing/Abarth/695C/?
每个Ad都在一个class叫content里,所以我写了一个for循环获取所有contentclasses,然后拼命获取每个content的数据"Ad",但是我在每次循环迭代中获取所有内容的数据。这是我在 scrapy shell 中的代码:
scrapy shell "http://www.cars2buy.co.uk/business-car-leasing/Abarth/695C/"
for content in response.xpath('//*[@class="pitem"]/div[1]/div[2]/div[1]'):
print content.xpath('//*[@class="detail"]/p/text()[2]').extract()
但输出是:
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
[u' 48 months', u' 48 months', u' 48 months', u' 36 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 48 months', u' 36 months']
这意味着它在每次迭代中获取所有标签的数据!! 我需要输出为:
48 months 48 months 48 months 36 months 48 months 48 months 48 months 48 months 48 months 36 months
您可以直接使用 xpath 来 select 具有 class="detail" 的元素,像这样更改您的代码:
In [5]: for content in response.xpath('//*[@class="detail"]/p/text()[2]').extrac
t():
...: print content
...:
48 months
48 months
48 months
36 months
48 months
48 months
48 months
48 months
48 months
36 months
要获取每个广告的数据,您可以使用以下代码:
def parse(self, response):
for detail in response.xpath('//div[@class="detail"]/p'):
item = dict()
item['term'] = detail.xpath('text()[2]').extract_first()
item['mileage'] = detail.xpath('text()[4]').extract_first()
item['payment'] = detail.xpath('text()[6]').extract_first()
item['fee'] = detail.xpath('text()[8]').extract_first()
yield item
# {'term': ' 48 months', 'mileage': ' 10,000', 'payment': ' £2,227.86 + VAT', 'fee': ' £249.00 + VAT'}
请注意,您需要使用 extract_first()
方法,因为 extract()
return 是一个列表。