利用requests, beautifulsoup包爬取股票信息网站
这是第一次用requests, beautifulsoup实现爬虫,此次爬取的是一个股票信息网站:http://www.gupiaozhishi.net.cn。
实现非常简单,只是为了demo使用的数据采集,故而基本未做任何的优化,比方说代理,并发等。但对网上较为复杂的爬虫实例而言,此节可以作为简单的入门实例参考。
基本上爬虫的第一步都是对网页的解析,http://www.gupiaozhishi.net.cn这个网站非常简单,基本要爬取的信息的url信息均在首页上可以爬取到。
import requests
home = requests.get('http://www.gupiaozhishi.net.cn/',headers = {},cookies = {})
home.encoding = 'gb2312' from bs4 import BeautifulSoup
home_html_doc = home.text home_soup = BeautifulSoup(home_html_doc, 'lxml')
通过上面的代码就已经将网页信息的html信息爬取下来,网站的默认的编码通过<meta>中的charset属性查看,由于charset = 'gb2312' ,故这边使用'gb2312'的编码方式。
将爬取下来的html信息传入BeautifulSoup实例,以'lxml'的方式对html信息进行解析。实际练习过程中,可以使用print( home_soup.prettify())的方式,将requests获取的http文件解析成我们习惯看的html格式的内容。
由于我此次是希望通过爬取首页信息获取所有的FAQ问题的url,所以通过下面代码获取相应的url信息。
url_list = [] # 用于存储所有的a 标签中的href内容
knowledge_url_list = home_soup.find_all('a') # 抓取到网页的所有a标签的信息,存储类型为list。
for i in knowledge_url_list:
uri = i.get('href') # 找到所有a标签内的 超链接信息
url_list.append(uri) '''虽然上面已经解析出了所有的href信息,但是有很多信息并不是我们想要的,发现想要的FAQ信息的url都均有共同的特性,以.html结尾。所以选择用正则的方式剔除到不要的''' pattern_url_list =[] #用正则表达式的方式挑选符合条件的href内容 import re
for i in url_list:
patterns =r'[a-zA-Z]+://[^\s]*.html$'
res = re.match(patterns , i) if res is not None:
pattern_url_list.append(res.group()) #最后获取符合条件的url共计242个,即242个FAQ
成功爬取所有的信息后,我们就可以用各种方式去实现抓取所有的url信息里面的相应内容,针对一个FAQ页面的问题进行了解析处理,加上测试发现基本所有的url都可以用同样的方式去处理。特殊页面特殊处理。
其中发现了几个问题:
1. 字符编码问题:网页的问题中有少量的繁体字,不在gb2312的字符范围内,无法解析,出现乱码;
2. 有大量的内容信息中打印出来的信息有 注释内容,需要将注释内容剔除。
3. 文本内容在一个span标签内,通过<br/>标签实现换行,少量的<p>标签的内容在内部最后。
4. 实现过程中采用的是将文本内容用列表的方式添加,在for循环体内,list类型的可变属性导致出现数据叠加。
下面的实现代码中实现了上面提到的几个问题,解决方法均有注释:
from bs4 import CData
from bs4 import element
import json
import os
pattern_url_list.remove('http://www.gupiaozhishi.net.cn/stock/chaogu/200702/4958.html')
pattern_url_list.remove('http://www.gupiaozhishi.net.cn/stock/rumen/200702/94.html')
#以上两个url是在实际测试中发现有特殊问题的两个url,选择直接剔除,避免复杂度。 question_dicts = {}
contents_list_str = []
#定义函数每次获取url中的问题和答案。 for u in pattern_url_list:
question = requests.get(u, headers = {}, cookies = {})
question.encoding = 'gb18030'
#由于繁体在gb18030中一定有映射关系,尝试后发现中文繁体乱码现象果然解决。
question_html_doc = question.text
question_soup = BeautifulSoup(question_html_doc,'lxml') [s.extract() for s in question_soup(['br','p'])] #去除不想要的br,p标签 question_soup.prettify() #测试过程中用来打印查看 question_name = question_soup.meta['content'] #获取标题
question_content = question_soup.find_all('span')[0] contents_list = question_soup.find_all('span')[0].contents
'''每个问题页面上有三个span标签,其中每个页面上的第一个span标签内存储存了所有的答案的文本内容。''' for i in contents_list:
if type(i) == element.Comment:
pass #如果这一行内容是注释,清除
else:
if len(i) <1 or i is None:
pass
else:
i = i.strip()
# 剔除空行和多余的空格键,换行符等 contents_list_str.append(str(i)) #将符合条件的字符串行添加到答案内容列表中 contents = ''.join(contents_list_str) #将列表内字符串拼接为一个字符串
question_dicts[question_name] = contents #将标签和内容添加到字典中 contents_list_str = [] #在下一次循环前,清空列表。防止元素叠加
最后将返回的字典内容写到文件中,目前采用的是json格式的:
# 将返回的内容写到文件
with open(os.path.dirname(__file__)+'/ff.json','w') as fp:
json.dump(question_dicts,fp)
如果要读取:
import json
f=open('ff.json','r',encoding='utf8')
data=json.loads(f.read())
print(data)
f.close()
利用requests, beautifulsoup包爬取股票信息网站的更多相关文章
- 利用python的requests和BeautifulSoup库爬取小说网站内容
1. 什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约 ...
- Requests+BeautifulSoup+正则表达式爬取猫眼电影Top100(名称,演员,评分,封面,上映时间,简介)
# encoding:utf-8 from requests.exceptions import RequestException import requests import re import j ...
- python利用urllib实现的爬取京东网站商品图片的爬虫
本例程使用urlib实现的,基于python2.7版本,采用beautifulsoup进行网页分析,没有第三方库的应该安装上之后才能运行,我用的IDE是pycharm,闲话少说,直接上代码! # -* ...
- python3+requests+BeautifulSoup+mysql爬取豆瓣电影top250
基础页面:https://movie.douban.com/top250 代码: from time import sleep from requests import get from bs4 im ...
- python3.6 利用requests和正则表达式爬取猫眼电影TOP100
import requests from requests.exceptions import RequestException from multiprocessing import Pool im ...
- 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论
这篇文章,我们继续利用 requests 和 xpath 爬取豆瓣电影的短评,下面还是先贴上效果图: 1.网页分析 (1)翻页 我们还是使用 Chrome 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...
- 爬虫系列2:Requests+Xpath 爬取租房网站信息
Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...
- 爬虫系列(十) 用requests和xpath爬取豆瓣电影
这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...
- python之简单爬取一个网站信息
requests库是一个简介且简单的处理HTTP请求的第三方库 get()是获取网页最常用的方式,其基本使用方式如下 使用requests库获取HTML页面并将其转换成字符串后,需要进一步解析HTML ...
随机推荐
- Python多线程同步互斥锁
接着上篇多线程继续讲,上篇最后的多线程共享全局变量对变量的处理值出错在本文中给出解决方案. 出现这个情况的原因是在python解释器中GIL全局解释器锁. GIL:全局解释器锁,每个线程在执行的过程都 ...
- PTA数据结构与算法题目集(中文) 7-28
PTA数据结构与算法题目集(中文) 7-28 7-28 搜索树判断 (25 分) 对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值.如果我 ...
- .NET Core项目部署到Linux(Centos7)(九)防火墙配置,允许外网或局域网访问.NET Core站点
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- .NET Core项目部署到Linux(Centos7)(四)VMware Workstation虚拟机Centos 7安装
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- 【数据库】MySQL数据库(四)
一.对数据的操作(详细版) 1.添加数据 1> insert into 表名 (字段1,字段2...) values (值1,值2...); 2> insert into 表名 (字段1, ...
- 以太坊代币,USDT归集流程图
1.用户充值 600 代币 (网站小助手会及时监听到用户的充值信息,并回调给用户填写的URL地址) 2.会员转账600代币,属于大额转账,开始触发系统的自动汇集程序 注:这里系统检测到会员的地址并没有 ...
- JAVA debug 断点调试
更多调试参看 https://www.cnblogs.com/yjd_hycf_space/p/7483471.html 先编译好要调试的程序.1.设置断点 选定要设置断点的代码行,在行号的区域后面单 ...
- Web Scraper 高级用法——使用 CouchDB 存储数据 | 简易数据分析 18
这是简易数据分析系列的第 18 篇文章. 利用 web scraper 抓取数据的时候,大家一定会遇到一个问题:数据是乱序的.在之前的教程里,我建议大家利用 Excel 等工具对数据二次加工排序,但还 ...
- 答好友困惑:Java零基础如何入门,不知道怎么学,迷茫ING
作者:程序员小跃 几个星期之前,我在知乎上看到一个提问,说是:对于完全没有经验零基础自身的数学底子也很弱学习Java应该怎么学习呢?想着类似的问题我也有过回答,并且反馈还是蛮好的,就参考之前的思路回答 ...
- 津津的储蓄计划 NOIp提高组2004
这个题目当年困扰了我许久,现在来反思一下 本文为博客园ShyButHandsome的原创作品,转载请注明出处 右边有目录,方便快速浏览 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津\ ...