4 python開源 scrapy爬蟲天氣預報

2021-07-27 23:32:15 字數 4590 閱讀 7971

獲取資訊

修改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

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

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

分析原始碼發現:

其中://*:選取文件中的所有元素。@:選擇屬性 /:從節點擊取 。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:\t\tday:()\t\tnight:()\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 =

另外,有些**對網路爬蟲進行了阻止(注:本專案僅從技術角度處理此問題,個人強烈不建議您用爬蟲爬取有版權資訊的資料),我們可以在設定中修改一下爬蟲的 user_agent 和 referer 資訊,增加爬蟲請求的時間間隔。

debug

顯示只有城市:

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

換個html**解析器就可以了,這裡建議用 beautifulsoup

爬蟲**如下:

4 Python 處理 ini 檔案

ini 檔案是initialization file的縮寫,即初始化檔案,是windows的系統配置檔案所採用的儲存格式。一 ini 檔案示例 下面是乙個 ini 檔案 school ip 10.15.40.123 mask 255.255.255.0 gateway 10.15.40.1 dns ...

4 python教程 分支 迴圈

講程式設計,不得不講到順序 分支 迴圈。順序就是從上到下執行 這個很簡單,不用再說了。在講分支 迴圈的時候,要特別注意python 中的強制縮排。我們先看看分支 1 簡單的if else a 1 if a 1 注意後面有乙個冒號。其中 是相等判斷 print 1 注意print 函式之前有乙個tab...

4,Python程式結構

a 3 單分支選擇結構 if a 3 print this number is greater than 3 雙分支選擇結構 if a 3 print this number is greater than 3 else print this number is smaller or equal t...