我想从网站上抓取数据:http://www.consumercomplaints.in/?search=ecom-express# 我希望我的请求对于更有经验的 Scrapy 用户来说是非常简单和直接的。
问题:我正在尝试抓取每条评论的数据。数据,**我的意思是主标题、副标题、用户名、日期和评论。 ** 但我无法获得评论,因为对于评论,我想要的是转到嵌入主标题的链接,然后获取整个评论而不是第一页上的简短评论,并对每个评论执行此操作。
我的蜘蛛类:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.spider import BaseSpider
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from consumercomplaint.items import ConsumercomplaintItem
class MySpider(BaseSpider):
name = "consumer"
allowed_domains = ["http://www.consumercomplaints.in"]
start_urls = ["http://www.consumercomplaints.in/?search=ecom-express&page=11"]
def parse(self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.select('//table[@width="100%"]')
print titles
items = []
del(titles[0])
for i in titles:
item = ConsumercomplaintItem()
item ["maintitle"] = i.select('.//a[1]//text()').extract()
item ["username"] = i.select('.//td[@class="small"]//a[2]/text()').extract()
item["date"]=i.select('.//td[@class="small"]/text()').extract()
item["subtitle"]=i.select('.//td[@class="compl-text"]/div/b[1]/text()').extract()
item["complaint"]=i.select('.//td[@class="compl-text"]/div/text()').extract()
items.append(item)
return items
我的元素类别:
from scrapy.item import Item, Field
class ConsumercomplaintItem(Item):
maintitle = Field()
username = Field()
date = Field()
subtitle = Field()
complaint = Field()
最佳答案
我会分两个阶段进行:
- a) 将部分数据保存到 item 中 b) 提取完整投诉的链接 c) 创建一个新请求并将您的项目保存到 request.meta 中 d) 产量请求
a) 提取完整的投诉 b) 从元中提取项目 c) 将投诉保存到项目字段中 d) 产量项
def parse(self, response): hxs = HtmlXPathSelector(response) titles = hxs.select('//table[@width="100%"]') print titles items = [] del(titles[0]) for i in titles: item = ConsumercomplaintItem() item ["maintitle"] = i.select('.//a[1]//text()').extract() item ["username"] = i.select('.//td[@class="small"]//a[2]/text()').extract() item["date"]=i.select('.//td[@class="small"]/text()').extract() item["subtitle"]=i.select('.//td[@class="compl-text"]/div/b[1]/text()').extract() complaint_link = row.xpath('//complaint/link/a/@href').extract_first() complaint_page = response.urljoin(complaint_link) request = scrapy.Request(cve_page, callback=self.parse_complaint) request.meta['item'] = item yield request def parse_complaint(self, response): item = response.meta['item'] item['complaint'] = response.xpath('/complaint/path/text()').extract_first() yield item
关于python - scrapy - 抓取下一页上的字段,然后返回到旧页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27977114/