Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.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 MultiCSVItemPipeline导出一些空项_Python_Python 2.7_Csv_Scrapy_Export To Csv - Fatal编程技术网

Python Scrapy MultiCSVItemPipeline导出一些空项

Python Scrapy MultiCSVItemPipeline导出一些空项,python,python-2.7,csv,scrapy,export-to-csv,Python,Python 2.7,Csv,Scrapy,Export To Csv,我有多个带有不同项目的爬行器,我想将每个项目导出到不同的csv文件中。我使用了中的代码示例,但存在一个问题 现在我的蜘蛛只会写“页面”项。所有项目都在shell中填充,但文件始终为空。我调试了管道,但到目前为止没有发现错误 这是我的蜘蛛: 导入csv 进口羊瘙痒 从BeautifulSoup导入BeautifulSoup 从scrapy.linkextractors.lxmlhtml导入LxmlLinkExtractor 从scrapy.spider导入规则 从DataSpiders导入CSV_

我有多个带有不同项目的爬行器,我想将每个项目导出到不同的csv文件中。我使用了中的代码示例,但存在一个问题

现在我的蜘蛛只会写“页面”项。所有项目都在shell中填充,但文件始终为空。我调试了管道,但到目前为止没有发现错误

这是我的蜘蛛:

导入csv
进口羊瘙痒
从BeautifulSoup导入BeautifulSoup
从scrapy.linkextractors.lxmlhtml导入LxmlLinkExtractor
从scrapy.spider导入规则
从DataSpiders导入CSV_路径
从ScrapingItems导入TrierDeItem
从SuperSpider导入SuperSpider
HTML_PATH='pages/trier.de/'
TrierDeSpider类(scrapy.Spider、SuperSpider):
名称='trierDeSpider'
允许的\u域=['trier.de']
拒绝的_域=[]
起始URL=[
'https://www.trier.de/rathaus-buerger-in/trier-in-zahlen/',
'https://trier.de/startseite/',
'https://www.trier.de/leben-in-trier/',
'https://www.trier.de/kultur-freizeit/',
'https://www.trier.de/wirtschaft-arbeit/',
'https://www.trier.de/bildung-wissenschaft/',
'https://www.trier.de/bauen-wohnen/',
'https://www.trier.de/umwelt-verkehr/',
]
#设置蜘蛛的起点并开始从起始URL爬网
规则=(规则(lxmlinkextractor(allow=()),callback='parse',follow=True),)
def解析(自我,响应):
"""
解析页面正文的链接。通过将允许的域添加到请求中来跟踪这些域。使用
回调和方法parse_页。
:参数响应:
:返回:
"""
对于LXMLinkExtractor中的链接(允许=self.allowed\u域,拒绝=self.denied\u域)。提取\u链接(响应):
产生scrapy.Request(response.urljoin(link.url),callback=self.parse\u页面)
def解析页面(自我,响应):
"""
分析当前页面以获取信息。
:参数响应:
:返回:
"""
trier_de_item=TrierDeItem()
生成self.parse\u general\u page\u info(响应、HTML\u路径)
#提取页面url
trier_de_item[“url”]=response.url
#提取爬网日期时间
trier_de_item[“爬行日期时间”]=响应。标题['date']
#提取页面标题
trier_de_item[“title”]=response.css('title::text').extract()
#提取描述标签
trier_de_item[“description”]=response.xpath('//meta[@name=“description”]/@content').extract()
trier_de_item[“og_description”]=response.xpath('//meta[@name=“og:description”]/@content').extract()
#提取所有页眉
trier_de_item[“news_title”]=response.xpath('//div[@class=“dachzeile”]/text()).extract()
#摘录主题
trier_de_item[“topic”]=response.xpath('//div[@class=“topic”]/text()).extract()
#摘录标题
trier_de_item['headlines']=response.xpath('//h1/text()').extract()
#检查页面是否包含表
table=response.xpath('//table[@class=“datentabelle”]')。extract()
如果len(表)>0:
self.parse_表(response.body,trier_de_项['headlines'][0])
成品率检验项目
@静力学方法
def parse_表格(正文html,标题):
'''
用表格解析HTML页面并保存到csv文件
:param body_html:
:参数标题:
:返回:
'''
title=title.替换('/','')
尝试:
#从标题创建文件名
文件名=标题+'.csv'
汤=美汤(body_html)
汤。美化(“utf-8”)
内容=[]
#在html中查找所有表
tables=soup.findAll('table')
对于表中的表:
#查找到达表行
对于table.findAll('tr')中的行:
#提取每个表格标题和行,并从每行提取文本到行
行=[]
对于第.findAll行('th')中的标题:
如果header.text中有“”:
行。追加(“”)
其他:
line.append(header.text)
对于row.findAll('td')中的行:
如果在row.text中为“”:
行。追加(“”)
其他:
line.append(row.text)
content.append(第行)
#打开一个新的csv文件,并将每一行写入该文件
打开(CSV_路径+文件名,'wb')作为CSV_文件:
wr=csv.writer(csv_文件)
对于内容中的行:
wr.writerow(行)
例外情况除外,如e:
打印(e)
通过
超级皮德尔:

导入URL解析 从scrapy.linkextractors.lxmlhtml导入lxmlinkextractor 从DataSpiders导入写入html 从DataSpiders.ScrapingItems导入PageItem,BaseItem 允许的文件类型=('.pdf'、'.csv'、'.xls'、'.xlsx') 类超级spider: 定义初始化(自): 通过 def url_加入(自身、url、响应): ''' 用响应连接URL :param URL: :参数响应: :返回: ''' 已加入的URL=[] 对于url中的url: 连接的url.append(response.urljoin(url)) 返回加入的URL def解析\常规\页面\信息(自我、响应、HTML \路径): page_item=PageItem() page_item[“url”]=response.url #提取响应体 如果response.url中有“jsp”: url=response.url.split('.jsp') 写入html(url[0],response.body,html\u路径) response.url中的elif“?”: url=response.url.split(“?”) 写入html(url[0],response.body,html\u路径) 其他: 编写html(response.url、response.body、html\u路径) #搜索f