先送上傳送門,scrapy中文網,畫風清奇的使用說明網站:http://www.scrapyd.cn/doc/139.html
安裝完python就可以一鍵安裝scrapy了
pip3 install scrapy
建立一個項目
scrapy startproject stock
看到如下輸出:
You can start your first spider with:
cd stock
scrapy genspider example example.com
裝了PYCHARM或者别的python開發工具的童鞋就可以在PYCHARM裡面找到對應路徑打開這個項目了(file->open…->打開檔案夾)。scrapy已經自動建立了項目架構:
第一步在spiders檔案夾下面建立一個py檔案,
stock_spider.py
scrapy的規則
A:首先我們需要建立一個類,并繼承scrapy的一個子類:scrapy.Spider 或者是其他蜘蛛類型,後面會說到,除了Spider還有很多牛X的蜘蛛類型;
B:然後定義一個蜘蛛名,name=“” 後面我們運作的話需要用到;
C:定義我們需要爬取的網址,沒有網址蜘蛛腫麼爬,是以這是必須滴;
D:繼承scrapy的一個方法:start_requests(self),這個方法的作用就是通過上面定義的連結去爬取頁面,簡單了解就是下載下傳頁面。
我們從東方财富網下載下傳股票清單
先簡單的儲存HTML下來看看
'''
這是主程式
'''
import scrapy
class StockSpider(scrapy.Spider):
name = 'stock_spider'
def start_requests(self):
# 東方财富網擷取股票清單
urls = [
'http://quote.eastmoney.com/center/gridlist.html#hs_a_board',
]
headers = {
'Referer': 'http://quote.eastmoney.com',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
}
for url in urls:
yield scrapy.Request(url=url, headers=headers, callback=self.parse)
def parse(self,response):
filename = 'stock_file'
with open(filename,'wb') as f:
f.write(response.body)
self.log('save file %s' % filename)
在項目中就有了如下檔案:
打開一看:
<div class="listview full">
<table id="table_wrapper-table" class="table_wrapper-table"><thead></thead><tbody></tbody></table>`
我們最需要的
<tbody>
标簽裡什麼都沒有,喪心
這個時候需要使用
selenium
作為中間件,當中遇到一點小問題,傳送門:
import selenium失敗的解決方案
打開項目中
middlewares.py
輸入如下代碼:
這裡用到了chromedriver配置傳送門:
https://blog.csdn.net/ywj_486/article/details/80940087
from scrapy import signals
import scrapy
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
class StockMiddleware(object):
def process_request(self, request, spider):
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
self.driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='/Users/yaochenli/stock/stock/chromedriver')
self.driver.get(request.url)
time.sleep(3)
html = self.driver.page_source
self.driver.quit()
return scrapy.http.HtmlResponse(request.url, body=html.encode('utf-8'), encoding='utf-8', request=request)
再打開
settings.py
先将robotstxt_obey改成false
再打開DOWNLOADER_MIDDLEWARES 将中間的類名改成我們剛剛添加的類名
全部儲存好
scrapy crawl stock_spider
再打開檔案看
可以看到我們要的
<tbody>
的内容已經有了
先到這裡。