1. 利用Scrapy对接Seleniumr的方法实现爬取网站(新浪财经上海A股股票) 的股票信息,将爬取到的数据保存到csv文件并输出。爬取的数据包括:代码,名称,最新价,买入,卖出,昨收,今开,最高,最低,成交量/手,成交额/万,振幅,换手率,市净率,市盈率,总股本,流通股。爬取网址:https://vip.stock.finance.sina.com.cn/mkt/#sh_a
时间: 2023-06-16 15:06:29 浏览: 117
这个问题比较复杂,需要使用Scrapy和Selenium两个库进行结合使用。下面是一个简单的示例代码:
首先,需要安装Scrapy和Selenium库,可以使用以下命令进行安装:
```
pip install scrapy
pip install selenium
```
接下来,创建一个Scrapy项目:
```
scrapy startproject sina_stock
```
在项目目录下创建一个spider,例如`sina.py`,并添加以下代码:
```python
import scrapy
from scrapy.selector import Selector
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
class SinaSpider(scrapy.Spider):
name = 'sina'
allowed_domains = ['vip.stock.finance.sina.com.cn']
start_urls = ['https://vip.stock.finance.sina.com.cn/mkt/#sh_a']
def __init__(self):
chrome_options = Options()
chrome_options.add_argument('--headless')
self.driver = webdriver.Chrome(chrome_options=chrome_options)
def parse(self, response):
self.driver.get(response.url)
time.sleep(5)
sel = Selector(text=self.driver.page_source)
rows = sel.xpath('//*[@id="dataTable"]/div[2]/table/tbody/tr')
for row in rows:
code = row.xpath('td[1]/a/text()').extract_first()
name = row.xpath('td[2]/a/text()').extract_first()
latest_price = row.xpath('td[3]/span/text()').extract_first()
buy_price = row.xpath('td[4]/span/text()').extract_first()
sell_price = row.xpath('td[5]/span/text()').extract_first()
close_price = row.xpath('td[6]/span/text()').extract_first()
open_price = row.xpath('td[7]/span/text()').extract_first()
high_price = row.xpath('td[8]/span/text()').extract_first()
low_price = row.xpath('td[9]/span/text()').extract_first()
volume = row.xpath('td[10]/span/text()').extract_first()
turnover = row.xpath('td[11]/span/text()').extract_first()
amplitude = row.xpath('td[12]/span/text()').extract_first()
turnover_rate = row.xpath('td[13]/span/text()').extract_first()
pb_ratio = row.xpath('td[14]/span/text()').extract_first()
pe_ratio = row.xpath('td[15]/span/text()').extract_first()
total_shares = row.xpath('td[16]/span/text()').extract_first()
circulating_shares = row.xpath('td[17]/span/text()').extract_first()
yield {
'code': code,
'name': name,
'latest_price': latest_price,
'buy_price': buy_price,
'sell_price': sell_price,
'close_price': close_price,
'open_price': open_price,
'high_price': high_price,
'low_price': low_price,
'volume': volume,
'turnover': turnover,
'amplitude': amplitude,
'turnover_rate': turnover_rate,
'pb_ratio': pb_ratio,
'pe_ratio': pe_ratio,
'total_shares': total_shares,
'circulating_shares': circulating_shares
}
def closed(self, reason):
self.driver.quit()
```
在`__init__`方法中,创建了一个无头Chrome浏览器对象,这个浏览器对象会被用来获取动态加载的股票信息数据。
在`parse`方法中,使用Selenium模拟浏览器访问网站,然后使用XPath表达式提取页面中的股票信息数据,并将其作为字典对象`yield`出去。
最后,在`closed`方法中关闭浏览器对象。
最后,可以使用以下命令运行这个爬虫:
```
scrapy crawl sina -o stocks.csv
```
这个命令会将爬取到的数据保存到`stocks.csv`文件中。
阅读全文