我是关于Scrapy和Python的新手。非常感谢一些帮助...
我正在抓一个使用div的网站,而且我的生活无法解决为什么这不起作用。我只能填充Field1和Data1 ......总体计划是每页得到10分......
看看我的蜘蛛 - 我无法正确填充field2或data2 ......
import scrapy
from tutorial.items import AttorneysItem
class AttorneysSpider(scrapy.Spider):
name = "attorneys"
allowed_domains = ["attorneys.co.za"]
start_urls = [
"http://www.attorneys.co.za/CompanyHomePage.asp?CompanyID=537",
"http://www.attorneys.co.za/CompanyHomePage.asp?CompanyID=776",
]
def parse(self, response):
for sel in response.xpath('//div//div//div[3]//div[1]//div//div'):
item = AttorneysItem()
item['Field1'] = sel.xpath('//div//div//div[3]//div[1]//div[1]//div[1]/text()').extract()
item['Data1'] = sel.xpath('//div//div//div[3]//div[1]//div[1]//div[2]/text()').extract()
item['Field2'] = sel.xpath('//div//div//div[3]//div[1]//div[2]//div[1]/text()').extract()
item['Data2'] = sel.xpath('//div//div//div[3]//div[1]//div[2]//div[2]/text()').extract()
yield item
非常令人沮丧。该网站的链接是http://www.attorneys.co.za/CompanyHomePage.asp?CompanyID=537。
由于 稻谷
-------------- UPDATE ---------------------------
所以我有点进一步,但再次碰壁。
我现在可以选择好的元素,但我不知何故需要动态定义项目字段...我能够做的最好的是下面的,但它不是很好,因为字段的数量不一致,而且并不总是以相同的顺序。基本上我的说法有时他们的网站被列为第三个字段,有时它是第五个字段。
def parse(self, response):
item = AttorneysItem()
item['a01Firm'] = response.xpath('//h1[@class="name-h1"]/text()').extract()
item['a01Field'] = response.xpath('//div[@class="col-lg-3 display-label"]/text()').extract()[0].strip()
item['a01Data'] = response.xpath('//div[@class="col-lg-9"]/text()').extract()[0].strip()
item['a02Field'] = response.xpath('//div[@class="col-lg-3 display-label"]/text()').extract()[1].strip()
item['a02Data'] = response.xpath('//div[@class="col-lg-9"]/text()').extract()[1].strip()
item['a03Field'] = response.xpath('//div[@class="col-lg-3 display-label"]/text()').extract()[2].strip()
item['a03Data'] = response.xpath('//div[@class="col-lg-9"]/text()').extract()[2].strip()
item['a04Field'] = response.xpath('//div[@class="col-lg-3 display-label"]/text()').extract()[3].strip()
item['a04Data'] = response.xpath('//div[@class="col-lg-9"]/text()').extract()[3].strip()
再次感谢所有可以提供帮助的人:D
答案 0 :(得分:0)
您提供的xpath
存在多个问题:
div
的级别。相反,要充分利用selectors。 此外,您不需要for循环。
一种更简洁的方法如下:
item = AttorneysItem()
item['Field1'] = response.xpath('//div[@class="col-lg-3 display-label"]/text()').extract()[0]
item['Data1'] = response.xpath('//div[@class="col-lg-9"]/text()').extract()[0]
item['Field2'] = response.xpath('//div[@class="col-lg-3 display-label"]/text()').extract()[1]
item['Data2'] = response.xpath('//div[@class="col-lg-9"]/text()').extract()[1]
yield item
如果您不知道,可以使用scrapy shell来测试您的xpath。
只需在命令行中输入scrapy shell url
,其中url对应于您正在抓取的网址。