Dan*_*ker 5 scrapy web-scraping
我正在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)
您可以default_output_processor
在加载器以及各个字段上的其他处理器上使用,请参阅title
:
from scrapy.spider import BaseSpider
from scrapy.contrib.loader import XPathItemLoader
from scrapy.contrib.loader.processor import Compose, MapCompose
from w3lib.html import replace_escape_chars, remove_tags
from ccpstore.items import Greenhouse
class GreenhouseSpider(BaseSpider):
name = "greenhouse"
allowed_domains = ["domain.com"]
start_urls = ["http://www.domain.com"]
def parse(self, response):
l = XPathItemLoader(Greenhouse(), response=response)
l.default_output_processor = MapCompose(lambda v: v.strip(), replace_escape_chars)
l.add_xpath('name', '//div[@class="product_name"]')
l.add_xpath('title', '//h1', Compose(remove_tags))
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"]')
return l.load_item()
Run Code Online (Sandbox Code Playgroud)
事实证明,数据中也有很多空格,因此将史蒂文的答案与更多研究相结合,使数据能够删除所有标签、换行符和重复空格。工作代码如下。请注意,在加载器行上添加了 text(),它删除了标签,而拆分和连接处理器则删除了空格和换行符。
def parse(self, response):
items = []
l = XPathItemLoader(item=Greenhouse(), response=response)
l.default_input_processor = MapCompose(lambda v: v.split(), replace_escape_chars)
l.default_output_processor = Join()
l.add_xpath('title', '//h1/text()')
l.add_xpath('usage', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl00_liItem"]/text()')
l.add_xpath('repeat', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl02_liItem"]/text()')
l.add_xpath('direction', '//li[@id="ctl18_ctl00_rptProductAttributes_ctl03_liItem"]/text()')
items.append(l.load_item())
return items
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5329 次 |
最近记录: |