您的位置:首页 > 其它

【爬虫】scrapy下载股票列表(一)——对接selenium中间件

2019-06-29 16:30 375 查看

先送上传送门,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>
的内容已经有了

先到这里。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐