Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy获取下载的文件名_Python_Scrapy_Scrapy Spider - Fatal编程技术网

Python Scrapy获取下载的文件名

Python Scrapy获取下载的文件名,python,scrapy,scrapy-spider,Python,Scrapy,Scrapy Spider,我是新来的,请容忍我 我有一个蜘蛛访问一个页面,下载一个文件。 最后,我想将文件名以及其他有用的信息写入db表 ->现在,我正在努力获取文件名: 从items.py: import scrapy from scrapy.item import Item, Field class NdrItem(scrapy.Item): district = Field() file_urls = Field() file_name = Field() files = Fiel

我是新来的,请容忍我

我有一个蜘蛛访问一个页面,下载一个文件。 最后,我想将文件名以及其他有用的信息写入db表

->现在,我正在努力获取文件名:

从items.py:

import scrapy
from scrapy.item import Item, Field

class NdrItem(scrapy.Item):
    district = Field()
    file_urls = Field()
    file_name = Field()
    files = Field()
来自spider:

import scrapy
from ndr.items import NdrItem

class CentralBedfordshireSpider(scrapy.Spider):
    name = 'central_bedfordshire2'
    allowed_domains = ['centralbedfordshire.gov.uk']
    start_urls = ['http://centralbedfordshire.gov.uk/business/rates/paying/published.aspx']

    def parse(self, response):

        relative_url = response.xpath("//article[@class='page-content__article']/div[@class='editor']/p[3]/a/@href").extract_first()
        download_url = response.urljoin(relative_url)
        item = NdrItem()
        item['district'] = 'central bedfordshire'
        item['file_urls'] = [download_url]
        print('------------------ Print the info I want to eventually go in db --------------------------')
        print(item['district'])
        print(item['files'])
    return item
编辑:文件正在下载,下载时文件名为sha1。我想要sha1文件名

编辑:运行此爬行器时出现以下错误:

2017-08-22 10:39:42[刮板.核心.刮板]错误:蜘蛛错误处理参考:无 回溯最近一次呼叫上次: 文件c:\python27\lib\site packages\twisted\internet\defer.py,第653行,在运行回调中 current.result=callbackcurrent.result,*args,**kw 文件C:\Users\MichaelAnderson\GDrive\Python\ndr\ndr\spiders\central\u bedfordshire2.py,第19行,在parse中 printitem[“文件”] 文件c:\python27\lib\site packages\scrapy\item.py,第59行,在\uuu getitem中__ 返回self.\u值[键]
KeyError:“文件”您希望从URL本身获取它。如果您使用Python3,下面的代码就可以了

from urllib.parse import urlparse
url = "http://centralbedfordshire.gov.uk/Images/business-rates-live-account-list-2017-07_tcm3-9033.csv"

print(urlparse(url).path.split("/")[-1])
'business-rates-live-account-list-2017-07_tcm3-9033.csv'
编辑-1

如果你需要得到SHA1哈希

import hashlib
sha1 = hashlib.sha1()
sha1.update(url.encode("utf-8"))
sha1_hash = sha1.hexdigest()

对于您的特定需求,我可能会使用Scrapy和定制管道,这些管道是在文件管道之后订购的。从文件管道文档:

下载文件后,将使用结果填充另一个字段文件。此字段将包含一个DICT列表,其中包含有关下载文件的信息,例如下载路径、从文件url字段获取的原始刮取url以及文件校验和。“文件列表”字段中的文件将保留与原始“文件URL”字段相同的顺序。如果某个文件下载失败,将记录一个错误,并且该文件不会出现在文件字段中


在您的spider中,用您希望下载的文件位置填充字段file_URL。然后,在使用标准文件管道处理该项之后,它将以相同的顺序包含文件URL中每个位置的具有SHA1文件名的字段文件。然后编写另一个自定义管道,它将在文件管道之后处理项目并使用此信息。

您希望文件名是什么?添加了信息-Cheesthanks,但我要的是sha1文件名。从文档中,文件是使用其URL的sha1哈希作为文件名存储的。Brilliant-这正是我想要的。我已尝试打印项目“文件”,但无法打印。请参阅上面的错误。@RedBeard您正试图在parse方法中打印文件字段,但该字段还不存在。该项首先必须通过将添加该字段的文件管道。首先将要下载的文件的位置放入解析方法中的“文件URL”字段中。然后,在设置中激活文件管道。接下来,在文件管道之后编写自定义管道顺序,以处理已存在文件字段的项目。编写自定义管道以打印“文件”,效果非常好-谢谢!