分析網(wǎng)站結(jié)構(gòu)
爬取blog.jobbole.com
該網(wǎng)站提供了所有文章的URL
新建虛擬環(huán)境(指定虛擬環(huán)境)
mkvirtualenv --python=路徑 虛擬環(huán)境名字
安裝scrapy(使用豆瓣源)
workon 虛擬環(huán)境名呵俏,進(jìn)入虛擬環(huán)境后
pip install -i https://pypi.douban.com/simple/ scrapy
新建Scrapy工程
scrapy startproject 項(xiàng)目名
利用模板新建爬蟲文件
在項(xiàng)目目錄下
scrapy genspider jobbole blog.jobbole.com
繼承了scrapy.Spider類,start_urls是一個(gè)list,可以放入想爬取的所有的URL。
對(duì)start_urls 進(jìn)行遍歷,yield Request交給Scrapy的下載器焚鲜,下載完之后,進(jìn)入到parse函數(shù)中,有一個(gè)response對(duì)象钮莲。
自定義main文件調(diào)用命令行使pycharm可以調(diào)試
os.path.abspath(__file__) ?# 得到當(dāng)前文件的絕對(duì)路徑
os.path.dirname(os.path.abspath(__file__)) ? ?# 得到當(dāng)前文件的父目錄
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy","crawl","jobbole"]) # 啟動(dòng)jobbole爬蟲
注意settings.py 的ROBOTSTXT_OBEY協(xié)議設(shè)置為False
出現(xiàn)錯(cuò)誤:No module named 'win32api'
因?yàn)閣indows下缺少這個(gè)包,通過pip命令安裝
pip install -i 豆瓣源 pypiwin32
通過xpath提取值
xpath使用路徑表達(dá)式在xml和html中進(jìn)行導(dǎo)航
xpath語(yǔ)法
1. article:選取所有article元素的所有子節(jié)點(diǎn)
2. /article:選取根元素article
3. article/a: 屬于article的子元素的a元素
4. //div: 獲取所有div
5. article//div: article下的所有div
6. //@class: 選取所有名為class的屬性
/article/div[1]
/article/div[last()]
//div[@lang='eng'] 取lang屬性為eng的div
/div/* div下的所有子節(jié)點(diǎn)
//* 選取所有元素
//div[@*] 選取所有帶屬性的元素
response.xpath('//*[@id="post-110287"]/div[1]/h1/text') ?# xpath提取標(biāo)題
response.xpath('//span[contains(@class,'vote-post-up')]') # 找一個(gè)span,他的class包含vote-post-up
通過CSS選擇器提取值
response.css('.entry-header h1::text').extract()
關(guān)鍵代碼
from scrapy.http import Request
from urllib import parse # python2 中是urlparse
Item
Scrapy 自動(dòng)下載圖片pipeline設(shè)置
no module PIL報(bào)錯(cuò):
pip install pillow
將數(shù)據(jù)作為json文件保存
將數(shù)據(jù)插入數(shù)據(jù)庫(kù)中
安裝mysql驅(qū)動(dòng):pip install mysqlclient