Scrapy框架 使用筆記

2021-10-09 18:39:07 字數 4681 閱讀 4003

本文記錄scrapy基本使用方法,不涉及框架底層原理說明。

建立專案:scrapy startproject ***

進入專案:cd *** 

建立爬蟲:scrapy genspider ***(爬蟲名) ***.com (爬取域) 

生成檔案:scrapy crawl *** -o ***.json (生成某種型別的檔案)

執行爬蟲:scrapy crawl ***

列出所有爬蟲:scrapy list

獲得配置資訊:scrapy settings [options]

(1)【命令列輸入】

> scrapy startproject weather

>cd weather

>scrapy genspider tianqi tianqihoubao.com

(2)【專案檔案初始結構及說明】

檔案結構: weatheer --||   weather --||  spider              --||  tianqi.py

--||  items.py

--||  middlewares.py

--|| piplines.py

--||  settings.py

--||scrapy.cfg

各個檔案以及關鍵**:

tianqi.py:

class tianqispider(scrapy.spider):

name = 'tianqi'

allowed_domains = ['tianqihoubao.com']

start_urls = [''] #爬蟲初次入口

def parse(self, response):#網頁解析

infoselector = response.xpath('')##使用選擇器 :xpath() /css()

info=infoselector

item=weatheritem(info=info)

yield item #提交item

next_url='';

if(next_url):

yield scrapy.request(url=next_url,callback=self.parse) #對新url爬取

items.py:

class weatheritem(scrapy.item):   #來自tianqi.py的資料封裝 。變數名與tianqi.py中傳入item物件的一致

# define the fields for your item here like:

# name = scrapy.field()

pass

piplines.py:

# #持久化儲存item

# # 另外需要在settings.py中啟用item pipelines:

# item_pipelines =

class weatherpipeline(object):

def process_item(self, item, spider):

##填入 資料清洗/檔案儲存**

return item

(3)最後完整專案原始碼:

專案功能:爬取江西近一月各地的天氣資訊,儲存json格式

tianqi.py:

import scrapy

import re

from weather.items import weatheritem

class tianqispider(scrapy.spider):

name = 'tianqi'

allowed_domains = ['tianqihoubao.com'] #

start_urls = ['weather/province.aspx?id=360000'] #爬蟲初次入口

def parse(self, response):#網頁解析1

names = response.xpath('//tr/td/a/text()').extract()##使用選擇器 :xpath() /css()

urls = response.xpath('//tr/td/a/@href').extract()

for i in range(0,len(names)):

place=names[i]

next_url = 'weather/'+urls[i]

if (next_url):

yield scrapy.request(url=next_url, callback=self.parse_detail) # 對新url爬取

def parse_detail(self,response):

place=response.xpath('//table/tr[3]/td[1]/b/text()').extract_first()

print("******************************==開始爬取【",place,"】天氣******************************===")

tr = response.xpath('//table/tr')

weatherlist=

for i in range(2,len(tr)):

wea = {}

wea['date']=tr[i].xpath('./td[2]/b/a/text()').extract_first()

s=tr[i].xpath('./td[3]/text()').extract_first()

pattern = re.compile(r'([\u4e00-\u9fa5])')

try:

match = pattern.search(s)

wea['type'] = match.group(1)

except exception:

print("***************=!!!!!!!!!!!!!\n",s,"!!!!!!!!!!!!!!***************\n",i)

wea['wind']=tr[i].xpath('./td[4]/text()').extract_first()

high_temp = tr[i].xpath('./td[5]/text()').extract_first()

s = tr[i].xpath('./td[8]/text()').extract_first()

pattern = re.compile(r'(-?\d*℃)')

low_temp="-999℃"

try:

match = pattern.search(s)

low_temp= match.group(1)

except exception:

print("***************=!!!!!!!!!!!!!\n", s, "!!!!!!!!!!!!!!**********==\n", i)

wea['temperature']=low_temp+"-"+high_temp

print("****************************************√√√success!***********************************=")

item=weatheritem()

info={}

info['name']=place

info['weather']=weatherlist

item['info']=info

yield item

items.py:

import scrapy

class weatheritem(scrapy.item): #來自tianqi.py的資料封裝 。變數名與tianqi.py中傳入item物件的一致

# define the fields for your item here like:

info = scrapy.field()

pass

piplines.py:

import  json

# #持久化儲存item

class weatherpipeline(object):

def process_item(self, item, spider):

##填入 資料清洗/檔案儲存**

with open('tianqi.json', 'a+',encoding='utf-8') as fp:

json.dump(item['info'], fp=fp, skipkeys=true, indent=4, ensure_ascii=false)

return item

總而言之,scrapy框架比較容易上手,專案建立之後只需要編寫3個檔案的**,唯一的較難點是選擇器的編寫(詳見

scrapy使用筆記

我是用anaconda安裝的scrapy 安裝完成,使用scrapy 建立爬蟲工程,之後把工程資料夾整個移動到ecipse,配置下run configure就可以執行了 初步了解了下xpath語法,會簡單地使用xpath摳取網頁裡面的內容 例子 td class hello 選取所有class標籤為...

scrapy使用筆記

1.先裝python環境 2.安裝pip 3.使用pip安裝 pip install lxml 3.4.2 有報錯提示 考慮到是網路不穩定的問題,這時我們用國內的映象源來加速 用pip安裝依賴包時預設訪問,但是經常出現不穩定以及訪問速度非常慢的情況,國內廠商提供的pipy映象目前可用的有 參考文章 ...

Python Scrapy框架使用筆記

1.scrapy engine 引擎負責控制資料流在系統中所有元件中流動,並在相應動作發生時觸發事件。詳細內容檢視下面的資料流 data flow 部分。此元件相當於爬蟲的 大腦 是整個爬蟲的排程中心。2.排程器 scheduler 排程器從引擎接受request並將他們入隊,以便之後引擎請求他們時...