小编Dan*_*ker的帖子

如何删除Scrapy蜘蛛数据中的空白区域

我正在Scrapy中编写我的第一个蜘蛛,并尝试按照文档进行操作.我已经实现了ItemLoaders.蜘蛛提取数据,但数据包含许多行返回.我已经尝试了很多方法来删除它们,但似乎没有任何工作.replace_escape_chars实用程序应该可以工作,但我无法弄清楚如何使用它ItemLoader.也有些人使用(unicode.strip),但同样,我似乎无法让它工作.有些人试图在items.py和蜘蛛中的其他人中使用这些.如何清除这些换行数据(\ r \n)?我的items.py文件只包含项目名称和字段().蜘蛛代码如下:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.loader import XPathItemLoader
from scrapy.utils.markup import replace_escape_chars
from ccpstore.items import Greenhouse

class GreenhouseSpider(BaseSpider):
    name = "greenhouse"
    allowed_domains = ["domain.com"]
    start_urls = [
        "http://www.domain.com",
    ]

    def parse(self, response):
        items = []
        l = XPathItemLoader(item=Greenhouse(), response=response)
        l.add_xpath('name', '//div[@class="product_name"]')
        l.add_xpath('title', '//h1')
        l.add_xpath('usage', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl00_liItem"]')
        l.add_xpath('repeat', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl02_liItem"]')
        l.add_xpath('direction', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl03_liItem"]')
        items.append(l.load_item())

        return items
Run Code Online (Sandbox Code Playgroud)

scrapy web-scraping

5
推荐指数
2
解决办法
5329
查看次数

如何将 url 值传递给 Scrapy 爬网中的所有后续项目?

我正在创建一个 CrawlSpider 来抓取产品网站。从第 1 页,我提取了 www.domain.com/color(简化)形式的类别 url。在类别页面上,我按照第一个链接进入产品详细信息页面,解析产品详细信息页面并通过 Next 链接爬到下一个页面。因此,每个颜色类别都有唯一的爬行路径。

困难在于颜色变量不在产品详细信息页面上。我可以通过如下解析链接从类别页面中提取它:

def parse_item(self, response):
        l = XPathItemLoader(item=Greenhouse(), response=response)
        l.default_output_processor = Join()
        l.add_value('color', response.url.split("/")[-1])
        return l.load_item()
Run Code Online (Sandbox Code Playgroud)

但是,对于从特定颜色类别页面开始抓取的产品,我想将此颜色值添加到从产品详细信息页面解析的项目中。产品 url 是通过跟随 Next 链接抓取的,因此在第一个链接之后引用类别页面丢失。Scrapy 文档中有一些关于 request.meta 的内容可以在解析器之间传递数据,但我不确定这是否适用于此。任何帮助,将不胜感激。

我的规则是:

Rule(SgmlLinkExtractor(restrict_xpaths=('//table[@id="ctl18_ctlFacetList_dlFacetList"]/tr[2]/td',)),),
Rule(SgmlLinkExtractor(restrict_xpaths=('//table[@id="ctl18_dlProductList"]/tr[1]/td[@class="ProductListItem"][1]',)),callback='parse_item', follow=True,),
Rule(SgmlLinkExtractor(restrict_xpaths=('//a[@id="ctl18_ctl00_lbNext"]',)),callback='parse_item', follow=True, ),
Run Code Online (Sandbox Code Playgroud)

python scrapy web-scraping

5
推荐指数
1
解决办法
1245
查看次数

标签 统计

scrapy ×2

web-scraping ×2

python ×1