【5-2】股票吧信息爬取实战

一、实验目标:

获取股票吧相关帖子的主题,阅读量,评论,时间等信息到本地文件

二、实验环境

1.Python 版本:Python3

2.所需依赖库: bs4, csv, urllib, re

①Requestshttp请求库

Bs4:全名BeautifulSoup,从网页抓取数据

Beautiful Souppython的一个HTMLXML的解析库,我们可以用它来方便的从网页中提取数据,它拥有强大的API和多样的解析方式。

其拥有3个特点:

提供一些简单的方法和python式函数,用于浏览,搜索和修改解析树,它是一个工具箱,通过解析文档为用户提供需要抓取的数据

自动将转入稳定转换为Unicode编码,输出文档转换为UTF-8编码,不需要考虑编码,除非文档没有指定编码方式,这时只需要指定原始编码即可

位于流行的Python解析器(如lxmlhtml5lib)之上,允许您尝试不同的解析策略或交易速度以获得灵活性

②Re:正则表达式

③网站选择原则: 股票信息静态存在于html页面中,非js代码生成,没有Robbts协议限制。
④选取方法: 打开网页,查看源代码,搜索网页的股票价格数据是否存在于源代码中。

接着查看百度个股信息网页的源代码,发现每只股票的信息在html代码中的存储方式如下

从上图中可以发现百度股票的数据是html代码生成的,符合我们本项目的要求,所以在本项目中选择百度股票的网址。

由于百度股票只有单个股票的信息,所以还需要当前股票市场中所有股票的列表,在这里我们选择东方财富网

因此,在我们存储每只股票的信息时,可以参考上图中html代码的存储方式。每一个信息源对应一个信息值,即采用键值对的方式进行存储。在python中键值对的方式可以用字典类型。因此,在本项目中,使用字典来存储每只股票的信息,然后再用字典把所有股票的信息记录起来,最后将字典中的数据输出到文件中。

三、待爬取资源列表

   爬取网站:http://guba.eastmoney.com/

四、实验步骤

步骤1: 从设置爬虫代码请求头

步骤2: 设置数据存储方式

步骤3: 获取列表第n页的目标信息,并解析

步骤4: 循环获取列表页面中的目标信息,并解析

具体代码

# 目标采集:帖子标题,阅读数、评论数、链接、发布时间  
import requests  
from bs4 import BeautifulSoup  
import time  
import csv  
import re  
#复制请求头  
# 在请求网页爬取的时候,输出的text信息中会出现抱歉,无法访问等字眼,这就是禁止爬取,需要通过反爬机制去解决这个问题。  
# headers是解决requests请求反爬的方法之一,相当于我们进去这个网页的服务器本身,假装自己本身在爬取数据。  
# 对反爬虫网页,可以设置一些headers信息,模拟成浏览器取访问网站 。  
head ={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',  
'Accept-Encoding':'gzip,deflate',  
'Accept-Language':'zh-CN,zh;q=0.9',  
'Cache-Control':'max-age=0',  
'Connection':'keep-alive',  
'Cookie':'st_pvi=87732908203428;st_si=12536249509085;qgqp_b_id=9777e9c5e51986508024bda7f12e6544;_adsame_fullscreen_16884=1',  
'Host':'guba.eastmoney.com',  
'Referer':'http://guba.eastmoney.com/list,600596,f_1.html',  
'0000000000secure-Requests':'1',  
'User-Agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/65.0.3325.181Safari/537.36'}  

#获取列表页第n页的具体目标信息,由BeautifulSoup解析完成  
def get_urls(url):  
    print("url:"+url)  
    baseurl = 'http://guba.eastmoney.com/'  
    q = requests.get(url,headers=head)  
    soup = BeautifulSoup(q.text,'html.parser')  
    urllist = soup.findAll('div',{'class':'articleh'})  
    # print(urllist)  
    for i in urllist:  
        if i.find('a') != None:  
            try:  
                detailurl = i.find('a').attrs['href'].replace('/','')  
                # 找到详情页地址  
                # print("ddd"+detailurl)  
                titel = i.find('a').get_text()  
                yuedu = i.find('span',{'class':'l1'}).get_text()  
                pinlun = i.find('span', {'class': 'l2'}).get_text()  
                #获取帖子时间  
                ptime = get_time(baseurl+detailurl)  
                w.writerow([detailurl,titel,yuedu,pinlun,ptime])  
                # print("zz"+baseurl + detailurl)  
            except:  
                pass  
#循环所有页数  
for i in range(1,2):  
    print(i)  
    #新安股份吧第1~2页,这里可以改到第N页  
    get_urls('http://guba.eastmoney.com/list,600596,f_'+str(i)+'.html')  

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用Python的第三方库requests和BeautifulSoup来爬取股票信息。具体步骤如下: 1. 导入所需库 ```python import requests from bs4 import BeautifulSoup ``` 2. 构造URL 以新浪财经为例,可以根据股票代码构造URL,如下所示: ```python url = 'http://finance.sina.com.cn/realstock/company/{0}/nc.shtml'.format(stock_code) ``` 其中,`stock_code`是需要爬取股票代码,比如说“600519”代表茅台股票。 3. 发送请求并解析数据 ```python response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') ``` 4. 提取所需数据 根据HTML结构,使用BeautifulSoup提取所需数据,比如说股票名称、当前价格、涨跌幅等信息。 ```python # 获取股票名称 name = soup.find('div', {'class': 'stock-name'}).find('h1').text.strip() # 获取当前价格 price = soup.find('div', {'class': 'stock-info'}).find('strong').text # 获取涨跌幅 change = soup.find('div', {'class': 'stock-info'}).find_all('span')[1].text.strip() ``` 5. 完整代码示例 ```python import requests from bs4 import BeautifulSoup def get_stock_info(stock_code): url = 'http://finance.sina.com.cn/realstock/company/{0}/nc.shtml'.format(stock_code) response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') name = soup.find('div', {'class': 'stock-name'}).find('h1').text.strip() price = soup.find('div', {'class': 'stock-info'}).find('strong').text change = soup.find('div', {'class': 'stock-info'}).find_all('span')[1].text.strip() print('股票名称:', name) print('当前价格:', price) print('涨跌幅:', change) get_stock_info('600519') # 茅台股票代码 ``` 输出结果: ``` 股票名称: 贵州茅台 当前价格: 1,549.00 涨跌幅: -0.64% ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值