python - scrapy - 抓取下一页上的字段,然后返回到旧页面

标签 python python-2.7 web-scraping scrapy

我想从网站上抓取数据: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()

最佳答案

我会分两个阶段进行:

  1. a) 将部分数据保存到 item 中 b) 提取完整投诉的链接 c) 创建一个新请求并将您的项目保存到 request.meta 中 d) 产量请求
  2. 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/

相关文章:

python - 为什么手动字符串反转比 Python 2.7 中的切片反转更糟糕? Slice 中使用的算法是什么?

html - 使用 rvest(或另一个 R 包)检测 HTML 段落的开头何时是不同的格式(例如 emboldened)

Python Logger 记录两次到控制台

python - 关键字和非关键字参数的顺序

python - Python中下划线字符的类型

java - 使用 Jsoup 将链接中的表解析为字符串

python-3.x - 如何根据替代属性选择所有元素? [美汤]

python - 跟踪打印发生的位置?

python - .whl 不是有效的 wheel 文件名,在 C :\中存储失败的调试日志

python-2.7 - 3 维 numpy 数组到多索引 Pandas 数据框