在日常爬取過程當中會遇到不少結構不一樣和渲染方式不一樣的網站,好比此次的寶籌貸,它的列表頁渲染方式和詳情頁的渲染方式是不一致的,詳情頁和投資記錄的數據渲染方式則一致。遇到這樣的數據,一般的應對方法有兩種:php
1.scrapy直接請求接口地址便可,模擬登陸或者甚至不用登陸,像爬取樂助貸、夠力金融、匯泰在線這些平臺同樣,直接從接口拿數據就好了。css
2.scrapy結合selenium進行爬取,這個就有意思了。html
經過工具的結合,對平臺的數據進行抓取,只寫邏輯,具體詳細的入庫操做就不仔細記錄了。web
1.列表頁渲染方式是html/csschrome
2.詳情頁和投資記錄頁是經過Ajax和api進行通訊的api
3.投資記錄的接口請求跟夠力金融的相似,都是須要接口翻頁(我就不重複寫了)瀏覽器
1.scrapy爬蟲框架微信
2.selenium自動化測試工具框架
代碼邏輯:dom
1.在middleware裏面將scrapy和selenium進行結合
2.在spider中重載方法,作到開啓爬蟲時自動調用瀏覽器,在爬蟲退出後自動關閉瀏覽器
3.到列表頁進行url的抽取,交給parse_detail進行詳細的爬取
4.parse_detail進行詳細數據爬取,而且交給item進行序列化
如下是spider裏面的代碼:
class BaochouSpider(scrapy.Spider): name = 'baochou' allowed_domains = ['www.baochoudai.com'] start_urls = ['https://www.baochoudai.com/index.php?g=Borrow&m=Public&a=lists&t=1'] def __init__(self): """ 經過chrome請求動態網頁 當爬蟲關閉的時候 自動關閉瀏覽器窗口 """ # 設置chromediver不加載圖片 chrome_opt = webdriver.ChromeOptions() # 初始化配置ChromeOptions prefs = {"profile.managed_default_content_settings.images": 2} # 開關 這是固定寫法 chrome_opt.add_experimental_option("prefs", prefs) # 配置進來 self.browser = webdriver.Chrome( executable_path="E:/SpiderTools/chromedriver.exe",chrome_options=chrome_opt) super(BaochouSpider, self).__init__() # 當收到spider_closed信號的時候,調用下面的spider_colosed方法來關閉瀏覽器 dispatcher.connect(self.spider_closed, signals.spider_closed) def spider_closed(self, spider): # 當爬蟲退出的時候關閉chrome self.browser.quit() def parse(self, response): """ 將當前列表頁的每條標的連接拿到 並傳給detail進行深刻爬取 已知頁碼能夠在url中循環 就不用翻頁了 """ total = response.css('h4.inline-block.mb15.fs22 a') for x in total: target_urls = x.css('::attr(href)').extract_first("") yield Request(url=parse.urljoin(response.url,target_urls),callback=self.parse_detail) for i in range(1,22): next_pages = "https://www.baochoudai.com/index.php?g=Borrow&m=Public&a=lists&t=1&page=%s" %(i) yield Request(url=next_pages,callback=self.parse) def parse_detail(self, response): loaders = BaochouItemLoader(item=BaochouItem(),response=response) loaders.add_css("title", ".inline-block.pr20 span::text") loaders.add_css("protype", ".inline-block.pr20 span::text") loaders.add_css("amount", ".fl.w280.pt15 span.fs46.lh1::text") loaders.add_css("profit", ".fl.w220.pt15 span.fs46.lh1::text") loaders.add_css("terms", "div.pl30:nth-child(3) div:first-child span:first-child::text") loaders.add_value("target_urls", response.url) loaders.add_value("target_urls_id", response.url) iloaders_item = loaders.load_item() yield iloaders_item
middleware裏面結合selenium的代碼就不記錄了。
全程經過瀏覽器進行自動化爬取,寫完代碼運行便可
因爲調用瀏覽器比較費時費力,因此在調用的時候禁止瀏覽器加載圖片,速度加快一倍
其實這種加載瀏覽器的方式速度會變慢,實在不得已而爲止的狀況下再考慮用(好比某些網站限制爬蟲訪問,那麼就要用到這種方式)
相對於直接請求接口api,這種方式獲得的數據並無那麼齊全,若是是請求api也是能夠拿到Userid的,對用戶行爲、偏好、投資能力等進行分析和推算。好比寶籌貸這個平臺的投資人屬性有如下幾種:
1.不少投資人都是隻投100元
2.投資終端最多的就是微信
3.能夠根據api中投資人的手機號碼計算投資人歸屬地
4.獲得完整數據後計算投資總額top10/投資次數Top10
5.投資人單筆投資金額廣泛是1000之內,超過1000的很少
如下是寶籌貸的部分數據展現 包括(id 標題、金額、收益率、期限、對應地址、惟一id、來源、類型)等
'2131', '2017101703保匯貸03號', '500000', '10', '4.0', NULL, NULL, 'https://www.baochoudai.com/index.php?g=Borrow&m=Public&a=show&borrow_nid=20171000003', '4b5f66f1445bcb6558515a85d5ba2c50', NULL, '寶籌貸', '14' '2132', '2017101102保匯貸02號', '600000', '9.8', '3.0', NULL, NULL, 'https://www.baochoudai.com/index.php?g=Borrow&m=Public&a=show&borrow_nid=20171000002', '4efd8370abcd9622df51c9f6a9fa674f', NULL, '寶籌貸', '14' '2133', '20150731房產抵押借款項目第03號', '900000', '15', '1.0', NULL, NULL, 'https://www.baochoudai.com/index.php?g=Borrow&m=Public&a=show&borrow_nid=20150700022', '700acd1785848a3072b484c0710251e0', NULL, '寶籌貸', '2' '2134', '20150728房產抵押借款項目第01-22號', '20000', '18', '0.3333333333333333', NULL, NULL, 'https://www.baochoudai.com/index.php?g=Borrow&m=Public&a=show&borrow_nid=20150700020', '3a2b77053c9518f02b579cff977e2e6e', NULL, '寶籌貸', '2' '2135', '20150812房產抵押04-1號', '20000', '20', '0.5', NULL, NULL, 'https://www.baochoudai.com/index.php?g=Borrow&m=Public&a=show&borrow_nid=20150800002', '3306ed018df098febcf08b55bd9a21f1', NULL, '寶籌貸', '2' '2136', '20150807銀行過橋項目第01號', '380000', '15', '0.3333333333333333', NULL, NULL, 'https://www.baochoudai.com/index.php?g=Borrow&m=Public&a=show&borrow_nid=20150800001', '821d818039a38a0ec8f0c3e7b0fa9373', NULL, '寶籌貸', '14' '2137', '20150818房產抵押04-2號', '20000', '20', '0.5', NULL, NULL, 'https://www.baochoudai.com/index.php?g=Borrow&m=Public&a=show&borrow_nid=20150800003', '32217f70fbb8af31a234e5d4dc12f46c', NULL, '寶籌貸', '2'