Python 网络爬虫笔记11 -- Scrapy 实战
生活随笔
收集整理的這篇文章主要介紹了
Python 网络爬虫笔记11 -- Scrapy 实战
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Python 網(wǎng)絡(luò)爬蟲筆記11 – Scrapy 實戰(zhàn)
Python 網(wǎng)絡(luò)爬蟲系列筆記是筆者在學(xué)習嵩天老師的《Python網(wǎng)絡(luò)爬蟲與信息提取》課程及筆者實踐網(wǎng)絡(luò)爬蟲的筆記。
課程鏈接:Python網(wǎng)絡(luò)爬蟲與信息提取
參考文檔:
Requests 官方文檔(英文)
Requests 官方文檔(中文)
Beautiful Soup 官方文檔
re 官方文檔
Scrapy 官方文檔(英文)
Scrapy 官方文檔(中文)
股票數(shù)據(jù) Scrapy 爬蟲
介紹:
- 爬取中國股市的股票信息, 從東方財富網(wǎng)獲取股票列表,根據(jù)股票列表逐個到百度股票獲取個股信息根據(jù)股票列表逐個到百度股票獲取個股信息,將結(jié)果存儲到文件將結(jié)果存儲到文件
- 東方財富網(wǎng):http://quote.eastmoney.com/stocklist.html
- 百度股票:https://gupiao.baidu.com/stock/
- 單個股票:https://gupiao.baidu.com/stock/sz002439.html
步驟:
建立工程和 Spider 模板
# cmd 依次輸入以下命令 scrapy startproject scrapy_stocks cd scrapy_stocks scrapy genspider stocks gupiao.baidu.com編寫Spider,處理鏈接爬取和頁面解析
- 配置stocks.py文件
- 修改對返回頁面的處理
- 修改對新增URL爬取請求的處理
編寫ITEM Pipelines,處理信息存儲
- 配置pipelines.py文件
- 定義對爬取項(Scraped Item)的處理類
- 配置ITEM_PIPELINES選項
運行爬蟲
# cmd輸入以下命令 scrapy crawl stocks配置優(yōu)化
修改 settings.py文件的相應(yīng)項
| NCURRENT_REQUESTS | Downloader最大并發(fā)請求下載數(shù)量,默認32 |
| NCURRENT_ITEMS | Item Pipeline最大并發(fā)ITEM處理數(shù)量,默認100 |
| NCURRENT_REQUESTS_PER_DOMAIN | 每個目標域名最大的并發(fā)請求數(shù)量,默認8 |
| NCURRENT_REQUESTS_PER_IP | 每個目標IP最大的并發(fā)請求數(shù)量,默認0,非0有效 |
stocks.py 文件:
# -*- coding: utf-8 -*- import scrapy import reclass StocksSpider(scrapy.Spider):name = "stocks"start_urls = ['http://quote.eastmoney.com/stocklist.html']def parse(self, response):"""解析 Response 對象,產(chǎn)生額外的爬取請求"""for href in response.css('a::attr(href)').extract():try:stock = re.findall(r's[hz]\d{6}', href)[0]url = 'https://gupiao.baidu.com/stock/' + stock + '.html'yield scrapy.Request(url, callback=self.parse_stock)except:continuedef parse_stock(self, response):"""解析 Response 對象"""info_dict = {}stock_info = response.css('.stock-bets')name = stock_info.css('.bets-name').extract()[0]key_list = stock_info.css('dt').extract()value_list = stock_info.css('dd').extract()for i in range(len(key_list)):key = re.findall(r'>.*</dt>', key_list[i])[0][1:-5]try:val = re.findall(r'\d+\.?.*</dd>', value_list[i])[0][0:-5]except:val = '--'info_dict[key] = valinfo_dict.update({'股票名稱': re.findall('\s.*\(', name)[0].split()[0] + re.findall('\>.*\<', name)[0][1:-1]})yield info_dictpipelines.py 文件:
class BaiduStocksPipeline(object):"""直接返回解析結(jié)果"""def process_item(self, item, spider):return itemclass BaiduStocksInfoPipeline(object):"""保存解析結(jié)果到文件"""def open_spider(self, spider):self.f = open('BaiduStockInfo.txt', 'w')def close_spider(self, spider):self.f.close()def process_item(self, item, spider):try:line = str(dict(item)) + '\n'self.f.write(line)except:passreturn itemsettings.py 文件:
ITEM_PIPELINES = {'scrapy_stocks.pipelines.BaiduStocksInfoPipeline': 300, }與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖
總結(jié)
以上是生活随笔為你收集整理的Python 网络爬虫笔记11 -- Scrapy 实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果笔记本电脑亮度无法调节_苹果MacB
- 下一篇: websocket python爬虫_p