1. 利用Scrapy对接Seleniumr的方法实现爬取网站(新浪财经上海A股股票) 的股票信息,将爬取到的数据保存到csv文件并输出。爬取的数据包括:代码,名称,最新价,买入,卖出,昨收,今开,最高,最低,成交量/手,成交额/万,振幅,换手率,市净率,市盈率,总股本,流通股。爬取网址:https://vip.stock.finance.sina.com.cn/mkt/#sh_a
时间: 2023-06-17 13:06:12 浏览: 304
新浪财经网站API实时获取期货行情数据 Python 源代码
3星 · 编辑精心推荐
为了实现对接 Scrapy 和 Selenium,我们可以使用 scrapy-selenium 插件,它可以帮助我们在 Scrapy 中使用 Selenium 来爬取 JavaScript 动态生成的页面。在开始之前,需要先安装 scrapy-selenium:
```
pip install scrapy-selenium
```
接下来就可以编写 Scrapy 爬虫了。首先,在 settings.py 文件中添加以下配置:
```
SELENIUM_DRIVER_NAME = 'chrome'
SELENIUM_DRIVER_EXECUTABLE_PATH = 'path/to/chromedriver'
SELENIUM_DRIVER_ARGUMENTS = ['--headless'] # 无头浏览器
```
然后,创建一个名为 sina_stock 的 Scrapy 项目,并创建一个名为 stocks 的爬虫。在 spiders/stocks.py 文件中编写爬虫代码:
```python
import scrapy
from scrapy_selenium import SeleniumRequest
class StocksSpider(scrapy.Spider):
name = 'stocks'
allowed_domains = ['vip.stock.finance.sina.com.cn']
start_urls = ['https://vip.stock.finance.sina.com.cn/mkt/#sh_a']
def start_requests(self):
for url in self.start_urls:
yield SeleniumRequest(url=url, callback=self.parse)
def parse(self, response):
rows = response.xpath('//table[@id="dataTable"]/tbody/tr')
for row in rows:
item = {}
item['code'] = row.xpath('td[1]/a/text()').get()
item['name'] = row.xpath('td[2]/a/text()').get()
item['last_price'] = row.xpath('td[3]/text()').get()
item['buy'] = row.xpath('td[4]/text()').get()
item['sell'] = row.xpath('td[5]/text()').get()
item['yesterday_close'] = row.xpath('td[6]/text()').get()
item['today_open'] = row.xpath('td[7]/text()').get()
item['highest'] = row.xpath('td[8]/text()').get()
item['lowest'] = row.xpath('td[9]/text()').get()
item['volume'] = row.xpath('td[10]/text()').get()
item['turnover'] = row.xpath('td[11]/text()').get()
item['amplitude'] = row.xpath('td[12]/text()').get()
item['turnover_rate'] = row.xpath('td[13]/text()').get()
item['pb_ratio'] = row.xpath('td[14]/text()').get()
item['pe_ratio'] = row.xpath('td[15]/text()').get()
item['total_shares'] = row.xpath('td[16]/text()').get()
item['circulating_shares'] = row.xpath('td[17]/text()').get()
yield item
```
在爬虫代码中,我们使用了 SeleniumRequest 替代了常规的 Request,这样就可以使用 Selenium 来爬取 JavaScript 动态生成的页面。然后,通过 XPath 提取表格中的数据,存储到 item 中,并通过 yield 将 item 传递到 Scrapy 引擎中。
最后,可以通过以下命令启动爬虫并将数据保存到 csv 文件中:
```
scrapy crawl stocks -o stocks.csv
```
这样就完成了对新浪财经上海 A 股股票信息的爬取。
阅读全文