一、演示的HTML頁面
URL:http://python123.io/ws/demo.html
內容:
二、產生步驟
步驟1:建立一個Scrapy爬蟲工程
桌面存在空文件夾Scrapy,cmd進入到Desktop\Scrapy中
輸入“scrapy startproject python123demo”創建項目,名爲python123demo。
創建後的文件夾內容:
其中,scrapy.cfg:部署Scrapy爬蟲的配置文件,不需要用戶修改
python123demo:框架的用戶自定義Python代碼
python123demo文件夾中的內容:
其中,_init_.py:初始化腳本,用戶不需要編寫
items.py:Items代碼模板(繼承類),一般不需要用戶編寫
middlewares.py:Middlewares代碼模板(繼承類),若用戶需要擴展中間件功能,則編寫
pipelines.py:Pipelines代碼模板(繼承類)
settings.py:Scrapy爬蟲的配置文件,若要優化爬蟲功能,則修改相應的配置項
spiders:Scrapy代碼模板目錄(繼承類)
spiders文件中的內容:
其中,__init__.py:初始文件,無需修改
__pycache__:緩存目錄,無需修改
步驟2:在工程中產生一個Scrapy爬蟲
進入工程目錄,輸入命令:scrapy genspider demo python123.io產生爬蟲
結果:在spiders文件夾下,產生了一個demo.py
注意:上述命令作用僅限於生成demo.py,也就是說,也可以手動生成demo.py
demo.py文件內容:
name = 'demo' #名字
allowed_domains = ['python123.io'] #給的域名,只能爬取本域名以下的內容
start_urls = ['http://python123.io/'] #列表中的N個URL,就是爬取的N個初始頁面
parse():用於處理響應,解析內容形成字典,發現新的URL爬取請求。
步驟3:配置產生的spider爬蟲
用戶修改demo.py,使之能訪問URL,並爬取相應的內容。
本項目將返回的HTML頁面存成文件
# -*- coding: utf-8 -*-
import scrapy
class DemoSpider(scrapy.Spider):
name = 'demo' #名字
#allowed_domains = ['python123.io'] #給的域名,只能爬取本域名以下的內容
start_urls = ['http://python123.io/ws/demo.html'] #列表中的N個URL,就是爬取的N個初始頁面
def parse(self, response): #將返回對象response的內容,寫到HTML文件中
fname=response.url.split('/')[-1] #提取的是文件名字demo.html
with open(fname,'wb') as f:
f.write(response.body)
sel .log('Saved file %s.'%name) #日誌
輸入“scrapy crawl demo”,運行爬蟲
結果:在工程目錄下,產生一個demo.html網頁文件
三、完整版本代碼
將下述代碼升級
升級前:
name = 'demo' #名字
start_urls = ['http://python123.io/ws/demo.html'] #列表中的N個URL,就是爬取的N個初始頁面
升級後:
name = 'demo' #名字
def start_requests(self):
urls=[
'http://python123.io/ws/demo.html'
]
for url in urls:
yield scrapy.Request(url=url,callback=self.parse)