這個爬蟲實例採用Scrapy的框架,理解來不是很好,需要理解其框架的執行過程纔行,這次邊看邊寫出來一天的時間用來調試找bug,真是寫代碼半小時,差錯數小時。錯在三個地方,都是那個粗心啊,一個group(0)後小括號寫成了中括號!一個是正則表達式後少了個符號!一個是.findall()寫錯,正確應該是.find_all()!
下面這個代碼區域由註釋組成,旨在梳理編寫爬蟲的大框架,梳理思路。後面兩個截圖是詳細代碼。
#股票數據Scrapy爬蟲實例
#功能描述:
# 技術路線:Scrapy
# 目標:獲取上交所和深交所所有股票的名稱和交易信息
# 輸出:保存到文件中。
#
#獲得股票代碼URL:http://quote.eastmoney.com/stock_list.html
#獲得具體股票信息URL:https://xueqiu.com/S/SZ300783
#步驟:
# 步驟1.建立工程和Spider模板
# 在命令行依次使用下面三個命令:
# scrapy startproject XueqiuStocks
# cd XueqiuStocks
# scrapy genspider stocks xueqiu.com
# 進一步修改stocks.py
# 步驟2:編寫Spider
'''
start_urls = ['http://quote.eastmoney.com/stock_list.html']
def parse(self, response):
for href in response.css('a::attr(href)').extract():
try:
stock = re.search(r'[s][hz]\d{6}',href).group(0)
stock = stock.upper()
url = 'https://xueqiu.com/S/' + stock
yield scrapy.Request(url,callback = self.parse_stock)
except:
continue
def parse_stock(self,response):
infoDict = {}
name = re.search(r'<div class=\"stock-name\">(.*?)</div>',response.text).group(1)
infoDict.update({'股票名稱':name.__str__()})
tableHtml = re.search(r'\"tableHtml\":\"(.*?)\",',response.text).group(1)
soup = BeautifulSoup(tableHtml,"html.parse")
table = soup.table
for i in table.find_all('td'):
line = i.text
l = line.split(":")
infoDict.update({l[0].__str__():l[1].__str__()})
yield infoDict
'''
# 步驟3:編寫ITEMPipelines
# 配置pipelines.py文件
# 定義對爬取項(Scraped Item)的處理類。
'''
#自定義一個Pipeline
class XueqiustocksInfoPipeline(object):
def open_spider(self,spider):
self.f = open("XueqiuStocksInfo.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:
pass
return item
'''
# 配置ITEM_PIPELINES選項
# 在settings.py中修改
# ITEM_PIPELINES = { 'XueqiuStocks.pipelines.XueqiustocksInfoPipeline': 300,}
# USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6'
# CONCURRENT_REQUESTS = 16
# 步驟4.運行爬蟲,在命令行輸入:scrapy crawl stocks
完整代碼如下:
另外還需要設置的settings.py中修改的部分:
ITEM_PIPELINES = {
'XueqiuStocks.pipelines.XueqiustocksInfoPipeline': 300,
}
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'
詳細的這個scrapy框架編寫爬蟲實例,見這篇博文https://blog.csdn.net/weixin_43978546/article/details/105117901,講得那不是一般的詳細,幾乎把嵩天老師的視頻從頭到尾,結合實際情況,圖文並茂形象描述了出來。
這個博主寫文很少確用MARKDOWN標記用的淋漓盡致,佩服,曾經諾諾同學和駿豪同學也是同款,感謝這些博主的無私奉獻和樂於分享。