Scrapy +仅在输出文件中提取text + carriage返回

时间:2017-10-04 21:51:16

标签: scrapy output character extra

我是Scrapy的新手并尝试从网页中提取内容,但在输出中获得了大量额外字符。见附图。

如何更新我的代码以摆脱字符?我只需要从网页中提取href。

Web Extracted output file image

我的代码:

reindex

1 个答案:

答案 0 :(得分:1)

现在我必须说...显然你有一些Python编程的经验恭喜,你显然正在做官方的Scrapy文档教程,这很棒,但对于我的生活我不知道给你的代码片段提供了你想要完成的事情。但没关系,这里有几件事:

您正在使用Scrapy爬行蜘蛛。当使用交叉蜘蛛时,规则会设置跟随或分页,如果您在将适当的正则表达式与规则匹配到页面时指向汽车返回函数,然后初始化提取或逐项化。这对于理解你不能在没有设置规则的情况下使用交火并且在使用交叉蜘蛛时同样重要而不能使用解析函数绝对是至关重要的,因为交叉蜘蛛构建解析函数的方式已经是本机内置函数在其内部。继续阅读文档或者只是创建一个交叉蜘蛛,看看它是如何在解析中创建的。

您的代码

class AttractionSpider(CrawlSpider):
name = "get-webcontent"
start_urls = [
    'http://quotes.toscrape.com/page/1/'
]
rules = () #big no no ! s3 rul3s

它应该是什么样子

class AttractionSpider(CrawlSpider):
    name = "get-webcontent"
    start_urls = ['http://quotes.toscrape.com'] # this would be cosidered a base url


# regex is our bf, kno him well, bassicall all pages that follow 
#this pattern ... page/.* (meant all following include no exception)
    rules = (
            Rule(LinkExtractor(allow=r'/page/.*'), follow=True),callback='parse_item'),
            )

第二:回顾我提到的关于将部件功能与Scrapy爬行蜘蛛一起使用的事情,你应该使用“parse-_item”;我假设您至少查看了官方文档,但总结一下,之所以无法使用它,因为爬行蜘蛛已经在其逻辑中使用了部件,因此通过在交叉蜘蛛中使用部件,您将覆盖本机函数它有,并可能导致各种错误和问题。

这很简单;我不认为我必须继续向你展示一个片段,但是可以随意去官方文档,在右边那里说“蜘蛛”继续前进并向下滚动直到你点击“爬行蜘蛛”并且它给出了一些注意事项谨慎......

到下一点:当你从最初的部分出发时,你不是(或者说你没有)有一个从解析到部件细节的回调,这让我相信当你进行爬行时你不会如果您正在尝试创建一个文本文件(或者您正在使用操作系统模块2写出一些东西,但实际上并没有写任何东西)那么我会超越第一页,所以我非常困惑为什么你使用正确的功能而不是阅读。

我的意思是,我自己在很多场合都使用外部文本文件或CSV文件来处理包含多个网址的内容,因此我不必将其粘贴在那里,但你明确写出或试图写入你说的文件是管道?现在我更加困惑了!但关键是我希望你很清楚,如果你试图创建一个文件或导出你提取的项目,可以选择导出和三种已经预先构建的CSV JSON格式。但正如你在对我的评论的回答中所说,如果你确实使用了管道和项目以及Porter实习生,你可以按照自己的意愿创建自己的导出格式,但如果它只是你需要的响应URL,为什么要通过所有麻烦?

我的离别词会是:你会很好地重新阅读Scrapy的官方文档教程,恶心并强调使用settings.py以及items.py的重要性。

# -*- coding: utf-8 -*-
import scrapy
import os
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from quotes.items import QuotesItem

class QcrawlSpider(CrawlSpider):
    name = 'qCrawl'
    allowed_domains = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com/']

    rules = (
        Rule(LinkExtractor(allow=r'page/.*'), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
    rurl = response.url
        item = QuotesItem()
        item['quote'] =response.css('span.text::text').extract()
        item['author'] = response.css('small.author::text').extract()
        item['rUrl'] = rurl
        yield item

    with open(os.path.abspath('') + '_' + "urllisr_" + '.txt', 'a') as a:
            a.write(''.join([rurl, '\n']))
            a.close()

当然,items.py可以通过您在蜘蛛中看到的那些来适当地填写,但是通过包括响应URL和逐项列表我可以写出来,即使是默认的Scrappy方法CSV等,或者我可以创建我的自己的。

在这种情况下,这是一个简单的文本文件,但可以变得非常狡猾;例如,如果您使用操作系统模块正确地编写它是相同的,例如我从视频托管站点创建m3u播放列表,您可以使用自定义CSV项目导出器。但即便使用自定义管道,我们也可以为您的csvs或其他任何想法的格式写出自定义格式。