利用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 ...
随机推荐
- Appium自动化(1) - 环境准备详细教程
Appium需要用到的工具 链接:https://pan.baidu.com/s/1od9x-1l0ALGRT5T6QFDHWg 提取码:bnhq 安装Appium Pyhton client包 1. ...
- css布局之盒模型
盒模型 导读 随着网络技术的不断发展,人们已经不再只关注网页的功能,还追求网页的性能和美观,于是css应运而生,一个完美的网页必然有一个完美的布局,而css盒模型是网页布局的基石,所以了解它对网页制作 ...
- Unity 游戏框架搭建 2019 (二十七) 弃用的代码警告解决
在前两篇,我们把所有的示例重头到尾整理了一遍. 当前的状态如下: 要做的事情: (完成) 备份:导出文件,并取一个合理的名字. 遗留问题: (完成) 第八个示例与之前的示例代码重复,功能重复. (完成 ...
- 使用appium框架测试安卓app时,获取toast弹框文字时,前一步千万不要加time.sleep等等待时间。
使用appium框架测试安卓app时,如果需要获取toast弹框的文案内容,那么再点击弹框按钮之前,一定记得千万不要加time.sleep()等待时间,否则有延迟,一直获取不到: 获取弹框的代码: m ...
- 数据库学习 day1 认识数据库
从SQL的角度而言,数据库是一个以某种有组织的方式储存的数据集合. 我们可以把它比作一个“文件柜”,这个“文件柜”是一个存放数据的物理位置,不管数据是什么,也不管数据是如何组织的. 下面介绍几个术语 ...
- 数据科学 R语言速成
文章更新于:2020-03-07 按照惯例,需要的文件附上链接放在文首: 文件名:R-3.6.2-win.exe 文件大小:82.4M 下载链接:https://www.lanzous.com/i9c ...
- flask-script的基本使用
Flask-Script flask-script的作用是可以通过命令行的形式来操作Flask.例如通过命令跑一个开发的服务器.设置数据库等. 命令的添加方式 1 .使用manage.command: ...
- html的嵌套规则
html元素分为块状元素和内联元素,块状元素作为其他元素的容器. 块状元素可以嵌套其他块状元素 块状元素可以嵌套内联元素 内联元素不能嵌套块状元素 p内不能嵌套块状元素 有几个特殊块状元素只能包含内联 ...
- idea运行gradle项目报错,找不到符号符号,方向xxxx类未知
报错: 解决:把build和run设置为idea
- ThinkPHP5中raw的作用
在tp5中,我们一般在模板中输出变量是这样的:{$test} 但是有时候在有些源码中我们可以看到这样的方式:{$test|raw} 这个时候如果你去找手册会发现,全文基本没有提到这个raw的作用. 那 ...