亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

4、python開源——scrapy爬蟲天氣預報

2019-11-06 06:22:09
字體:
來源:轉載
供稿:網友

獲取信息

修改items.py如下:

import scrapy

class TutorialItem(scrapy.Item):

    # define the fields for your item here like:

    # name = scrapy.Field()

    city = scrapy.Field()

    date = scrapy.Field()  

    dayDesc = scrapy.Field()  

    dayTemp = scrapy.Field() 

爬蟲代碼

內容如下,采用的項目還是之前創建的Tutorial/weather.py

import scrapy

from tutorial.items import TutorialItem

from scrapy.selector import Selector

from scrapy.http import Request

headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'}

class Douban(scrapy.Spider):

    name = 'weather'

    allowed_domains = ['sina.com.cn']

    start_urls = ['http://weather.sina.com.cn/hangzhou']

    def parse(self,response):

        item = TutorialItem()

        item['city'] = response.xpath("//*[@id='slider_ct_name']/text()").extract()

        tenDay = response.xpath('//*[@id="blk_fc_c0_scroll"]');

        item['date'] = tenDay.CSS('p.wt_fc_c0_i_date::text').extract()

        item['dayDesc'] = tenDay.css('img.icons0_wt::attr(title)').extract()

        item['dayTemp'] = tenDay.css('p.wt_fc_c0_i_temp::text').extract()

        return item

說明:

name: 用于區別Spider。該名字必須是唯一的,您不可以為不同的Spider設定相同的名字。

start_urls: 包含了Spider在啟動時進行爬取的url列表。因此,第一個被獲取到的頁面將是其中之一。后續的URL則從初始的URL獲取到的數據中提取。

parse() 是spider的一個方法。 被調用時,每個初始URL完成下載后生成的 Response 對象將會作為唯一的參數傳遞給該函數。 該方法負責解析返回的數據(response data),提取數據(生成item)以及生成需要進一步處理的URL的 Request 對象。

分析源碼發現:

城市名可以通過獲取id為slider_ct_name的h4元素獲取日期可以通過獲取id為blk_fc_c0_scroll下的class為wt_fc_c0_i_date的p元素獲取天氣描述可以通過獲取id為blk_fc_c0_scroll下的class為icons0_wt的img元素獲取溫度可以通過獲取id為blk_fc_c0_scroll下的class為wt_fc_c0_i_temp的p元素獲取

其中:

//*:選取文檔中的所有元素。@:選擇屬性 /:從節點選取 。extract():提取

Pipeline

    當Item在Spider中被收集之后,它將會被傳遞到Item Pipeline,一些組件會按照一定的順序執行對Item的處理。

    每個item pipeline組件(有時稱之為“Item Pipeline”)是實現了簡單方法的Python類。他們接收到Item并通過它執行一些行為,同時也決定此Item是否繼續通過pipeline,或是被丟棄而不再進行處理。

以下是item pipeline的一些典型應用:

清理HTML數據

驗證爬取的數據(檢查item包含某些字段)

查重(并丟棄)

將爬取結果保存到數據庫

PRocess_item(self, item, spider)

    每個item pipeline組件都需要調用該方法,這個方法必須返回一個 Item (或任何繼承類)對象, 或是拋出 DropItem 異常,被丟棄的item將不會被之后的pipeline組件所處理。

參數:

item (Item 對象) – 被爬取的item

spider (Spider 對象) – 爬取該item的spider

open_spider(self, spider)

    當spider被開啟時,這個方法被調用。

參數: spider (Spider 對象) – 被開啟的spider

close_spider(spider)

    當spider被關閉時,這個方法被調用

參數: spider (Spider 對象) – 被關閉的spider

from_crawler(cls, crawler)

PIPELINE代碼

編輯pipelines.py

class TutorialPipeline(object):

    def __init__(self):

        pass

    def process_item(self, item, spider):

        with open('wea.txt', 'w+') as file:

            city = item['city'][0].encode('utf-8')

            file.write('city:' + str(city) + '/n/n')

            date = item['date']

            desc = item['dayDesc']

            dayDesc = desc[1::2]

            nightDesc = desc[0::2]

            dayTemp = item['dayTemp']

            weaitem = zip(date, dayDesc, nightDesc, dayTemp)

            for i in range(len(weaitem)):

                item = weaitem[i]

                d = item[0]

                dd = item[1]

                nd = item[2]

                ta = item[3].split('/')

                dt = ta[0]

                nt = ta[1]

                txt = 'date:{0}/t/tday:{1}({2})/t/tnight:{3}({4})/n/n'.format(

                    d,

                    dd.encode('utf-8'),

                    dt.encode('utf-8'),

                    nd.encode('utf-8'),

                    nt.encode('utf-8')

                )

                file.write(txt)

        return item

 

    寫好ITEM_PIPELINES后,還有很重要的一步,就是把 ITEM_PIPELINES 添加到設置文件 settings.py 中。

ITEM_PIPELINES = {

    'tutorial.pipelines.TutorialPipeline': 1

}

另外,有些網站對網絡爬蟲進行了阻止(注:本項目僅從技術角度處理此問題,個人強烈不建議您用爬蟲爬取有版權信息的數據),我們可以在設置中修改一下爬蟲的 USER_AGENT 和 Referer 信息,增加爬蟲請求的時間間隔。

DEBUG

顯示只有城市:

        scrapy內置的html解析是基于lxml庫的,這個庫對html的解析的容錯性不是很好,通過檢查網頁源碼,發現有部分標簽是不匹配的(地區和瀏覽器不同取到的源碼可能不同)

換個html代碼解析器就可以了,這里建議用 BeautifulSoup

https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.html 

下載鏈接:

https://www.crummy.com/software/BeautifulSoup/bs4/download/4.5/ 

爬蟲代碼如下:

import scrapy

from tutorial.items import TutorialItem

from scrapy.selector import Selector

from scrapy.http import Request

from bs4 import BeautifulSoup

headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'}

class Douban(scrapy.Spider):  

    name = "weather"

    allowed_domains = ["sina.com.cn"]

    start_urls = ['http://weather.sina.com.cn']

    def parse(self, response):

        html_doc = response.body

        #html_doc = html_doc.decode('utf-8')

        soup = BeautifulSoup(html_doc)

        itemTemp = {}

        itemTemp['city'] = soup.find(id='slider_ct_name')

        tenDay = soup.find(id='blk_fc_c0_scroll')

        itemTemp['date'] = tenDay.findAll("p", {"class": 'wt_fc_c0_i_date'})

        itemTemp['dayDesc'] = tenDay.findAll("img", {"class": 'icons0_wt'})

        itemTemp['dayTemp'] = tenDay.findAll('p', {"class": 'wt_fc_c0_i_temp'})

        item = TutorialItem()

        for att in itemTemp:

            item[att] = []

            if att == 'city':

                item[att] = itemTemp.get(att).text

                continue

            for obj in itemTemp.get(att):

                if att == 'dayDesc':

                    item[att].append(obj['title'])

                else:

                    item[att].append(obj.text)

        return item


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频免费在线观看| 国产精品美腿一区在线看| 国内揄拍国内精品少妇国语| 国产亚洲精品激情久久| 亚洲女成人图区| 91av免费观看91av精品在线| 97视频在线观看亚洲| 午夜精品国产精品大乳美女| 亚洲成年人影院在线| 久久久成人的性感天堂| 992tv成人免费影院| 成人免费直播live| 成人性生交大片免费观看嘿嘿视频| 国产成人午夜视频网址| 在线观看免费高清视频97| 国产一区二区精品丝袜| 日韩av在线网页| 欧美日韩精品中文字幕| 亚洲国产精品成人一区二区| 国产亚洲a∨片在线观看| 欧美日韩一区二区免费在线观看| 亚洲毛茸茸少妇高潮呻吟| 国产在线精品播放| 欧美性资源免费| 亚洲成av人影院在线观看| 日韩最新中文字幕电影免费看| 日韩在线观看视频免费| 91精品国产91久久久久久吃药| 国产丝袜一区二区三区免费视频| 91地址最新发布| 91成人精品网站| 精品综合久久久久久97| 亚洲欧美激情一区| 清纯唯美亚洲综合| 精品久久久一区二区| 91精品国产91久久久久久| 欧美精品久久久久久久久久| 国产精品欧美激情在线播放| 亚洲人午夜精品| 欧美精品久久一区二区| 精品国产欧美成人夜夜嗨| 亚洲人成网站999久久久综合| 国产精品久久久亚洲| 国产成人在线精品| 91久久夜色精品国产网站| 日韩av影视在线| 久久精品国产精品亚洲| 色悠悠国产精品| 国产亚洲欧洲高清一区| 不卡毛片在线看| 国产999在线| 亚洲电影免费观看| 久久精品99无色码中文字幕| 97精品视频在线播放| 国产一区二区三区在线观看视频| 国产精品久久婷婷六月丁香| 欧美成人中文字幕在线| 国产精品久久一区| 国产亚洲精品美女久久久久| 国产精品久久国产精品99gif| 欧美在线国产精品| 亚洲成人a**站| 国产在线98福利播放视频| 国产女同一区二区| 亚洲成人黄色在线| 亚洲丝袜在线视频| 美日韩在线视频| 久久久久久久久久久国产| 欧美精品一区在线播放| 97精品国产97久久久久久| 91色在线视频| 国产精品偷伦一区二区| 亚洲视屏在线播放| 成人黄色免费片| 亲爱的老师9免费观看全集电视剧| 久久这里只有精品视频首页| 亚洲欧洲第一视频| 69久久夜色精品国产69乱青草| 欧美国产高跟鞋裸体秀xxxhd| 国产精品久久久亚洲| 国产精品第1页| 欧洲美女7788成人免费视频| 亚洲精选中文字幕| 国产精品夫妻激情| 亚洲黄色成人网| 国产乱人伦真实精品视频| 中文字幕精品一区二区精品| 国产精品青草久久久久福利99| 久久精品国产亚洲一区二区| 国产精品美女视频网站| 亚洲xxxx视频| 国产精品一区久久| 国产精品极品美女粉嫩高清在线| 欧美老女人性生活| 超碰精品一区二区三区乱码| 69av在线视频| 亚洲欧美日韩精品| 欧美成人激情视频| 久久久久久尹人网香蕉| 国产999在线观看| 欧美成在线观看| 午夜精品福利视频| 久久久久久久久久久人体| 国产999精品久久久影片官网| 视频一区视频二区国产精品| 亚洲成人免费网站| 亚洲精品网站在线播放gif| 九九精品在线播放| 日韩中文在线中文网三级| 国产精品丝袜久久久久久不卡| 国产精品27p| 欧美午夜精品久久久久久浪潮| 久久国产加勒比精品无码| 欧美成人午夜影院| 91极品女神在线| 日本中文字幕久久看| 伊人伊人伊人久久| 日本一区二区在线播放| 色与欲影视天天看综合网| 久久久久中文字幕2018| 欧美激情精品久久久久久大尺度| 色婷婷综合成人| 最新91在线视频| 国产精品色视频| 欧美一区二区视频97| 欧美在线播放视频| 91精品视频在线播放| 福利二区91精品bt7086| 日本a级片电影一区二区| 国产精品日韩在线| 亚洲精品天天看| 久久成人这里只有精品| 久久视频在线直播| 亚洲国产天堂久久综合网| 精品视频偷偷看在线观看| 这里只有精品丝袜| 亚洲自拍偷拍色图| 欧美日韩国产999| 亚州av一区二区| 亚洲a级在线播放观看| 97视频人免费观看| 亚洲精品一区在线观看香蕉| 欧美国产高跟鞋裸体秀xxxhd| 久久青草精品视频免费观看| 欧美成人一区在线| 中文字幕日韩精品在线观看| 性夜试看影院91社区| 97激碰免费视频| 欧美性色xo影院| 久久久久久国产| 久久久久久久久久久久av| 中文欧美日本在线资源| 丝袜亚洲欧美日韩综合| 欧美激情一区二区三区久久久| 久久亚洲精品毛片| 久久人人爽人人爽爽久久| 成人看片人aa| 这里只有视频精品| 欧美成人精品影院| 国产精品91免费在线| 26uuu久久噜噜噜噜| 91中文字幕在线| 国产一区二区美女视频| 欧美日韩一区二区精品|