【问题标题】:Scrapy Doesn't Scrape Bold TextScrapy 不会刮掉粗体文本
【发布时间】:2015-11-25 05:36:06
【问题描述】:

我已经在这个蜘蛛上工作了几个月了,一直被同样的问题困住 - 谁能帮帮我吗?

在上述网站(见下文)上,除粗体“型号名称”外,所有仪器数据都被抓取。这真令人气愤,我不知道该怎么办。

import re
import json
from urlparse import urlparse


from scrapy.selector import Selector
try:
    from scrapy.spider import Spider
except:
    from scrapy.spider import BaseSpider as Spider
from scrapy.utils.response import get_base_url
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.selector import HtmlXPathSelector
from database.items import databaseItem

from scrapy.log import *

class CommonSpider(CrawlSpider):
    name = 'brands.py'
    allowed_domains = ['usedprice.com']
    start_urls = ['http://www.usedprice.com/items/guitars-musical-instruments/index.html']

    rules = (

        Rule(LinkExtractor(allow=( )), callback='parse_item'),
    )


    def parse_item(self, response):
        hxs = HtmlXPathSelector(response)
        item = databaseItem()
        datao = datao = hxs.xpath('//tr[@class="oddItemColor baseText"]')
        datae = datae = hxs.xpath('//tr[@class="evenItemColor baseText"]')
        tmpNextPage = hxs.xpath('//div[@class="baseText blue"]/span[@id="pnLink"]/a/@href').extract()
        for attr in datao:
            *modelInfo = attr.xpath('.//b/text()').extract()*
            instrInfo = attr.xpathxpath('.//td//text()').extract()
            item['modelInfo'].append = modelInfo
            item['instrInfo'].append = instrInfo
            return databaseItem(modelInfo = modelInfo[1:], instrInfo = instrInfo[2:])
        for attr in datae:
            *modelInfo = attr.xpath('.//b/text()').extract()*
            instrInfo = attr.xpath('.//td//text()').extract()
            item['modelInfo'].append = modelInfo
            item['instrInfo'].append = instrInfo
            return databaseItem(modelInfo = modelInfo[1:], instrInfo = instrInfo[2:])

【问题讨论】:

  • 请修正缩进,添加 databaseItem 的代码,这样我们就可以在不编写存根的情况下测试代码。另外,要明确哪一行应该得到文本,结果应该是什么样子,以及它现在的样子。这样,我不在乎从一开始就进行调试。知道问题所在的 Xpath 可以减少多次调试。
  • 谢谢。我修正了我的错误并将应该抓住模型名称的行斜体。

标签: python scrapy


【解决方案1】:

你应该:

  • 使用精确的数组索引(而不是切片)来获取modelInfo 字段
    • [0][1:] == []
  • yield 每个 databaseItem 而不是返回它
  • 添加一些逻辑来检测粗体文本是否真的是你想要的
    • 感兴趣的表中每隔一行都以粗体显示“描述”,并且没有“类型”信息的“列”

(我没有运行你的代码,但我确实看过http://www.usedprice.com/items/guitars-musical-instruments/a-basses/index.html

【讨论】:

    猜你喜欢
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多