亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在抓皮中為每個類別制作單獨的輸出文件

在抓皮中為每個類別制作單獨的輸出文件

千萬里不及你 2022-08-25 14:14:14
我試圖根據其類別刮擦黃頁。因此,我從文本文件加載類別并將其提供給start_urls。我在這里面臨的問題是為每個類別單獨保存輸出。以下是我試圖實現的代碼:CATEGORIES = []with open('Catergories.txt', 'r') as f:    data = f.readlines()    for category in data:        CATEGORIES.append(category.strip())在 settings.py 中打開文件,并在蜘蛛中列出要訪問的列表。蜘蛛:# -*- coding: utf-8 -*-from scrapy.linkextractors import LinkExtractorfrom scrapy.spiders import CrawlSpider, Rulefrom ..items import YellowItemfrom scrapy.utils.project import get_project_settingssettings = get_project_settings()class YpSpider(CrawlSpider):    categories = settings.get('CATEGORIES')    name = 'yp'    allowed_domains = ['yellowpages.com']    start_urls = ['https://www.yellowpages.com/search?search_terms={0}&geo_location_terms=New%20York'                      '%2C '                      '%20NY'.format(*categories)]    rules = (        Rule(LinkExtractor(restrict_xpaths='//a[@class="business-name"]', allow=''), callback='parse_item',             follow=True),        Rule(LinkExtractor(restrict_xpaths='//a[@class="next ajax-page"]', allow=''),             follow=True),    )    def parse_item(self, response):        categories = settings.get('CATEGORIES')        print(categories)        item = YellowItem()        # for data in response.xpath('//section[@class="info"]'):        item['title'] = response.xpath('//h1/text()').extract_first()        item['phone'] = response.xpath('//p[@class="phone"]/text()').extract_first()        item['street_address'] = response.xpath('//h2[@class="address"]/text()').extract_first()        email = response.xpath('//a[@class="email-business"]/@href').extract_first()        try:            item['email'] = email.replace("mailto:", '')        except AttributeError:            pass
查看完整描述

2 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊


我會在后期處理中這樣做。將所有項目導出到一個帶有類別字段.csv文件。我認為你沒有以正確的方式思考這個問題,并使其過于復雜。不確定這是否有效,但它值得一試:)


with open('parent.csv', 'r') as file:

    reader = csv.reader(file)

    for row in reader:

        with open('{}.csv'.format(row[category]), 'a') as f:

            writer = csv.writer(f)

            writer.writerow(row)

您也可以使用蜘蛛閉合信號應用此代碼。


https://docs.scrapy.org/en/latest/topics/signals.html#scrapy.signals.spider_closed


查看完整回答
反對 回復 2022-08-25
?
青春有我

TA貢獻1784條經驗 獲得超8個贊

dict.items()返回可迭代,其中每個項目看起來像 要擺脫此錯誤,您需要刪除并解壓縮該項目,例如tuple (key, value)iterfor category, exporter in self.exporter.items():



查看完整回答
反對 回復 2022-08-25
  • 2 回答
  • 0 關注
  • 80 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號