python爬取天天基金网_Python爬虫日记二:爬取天天基金网
一、前言
这次的实验的任务是要爬取天天基金网的6000多个基金,并把爬取的数据存放到Mongodb数据库中,数据以供下次分析使用。而此次 需要采集的数据来自两个页面
页面1:从该页面爬取 所有基金代码、基金名称、基金URL
页面1
页面2:从上个页面获取的基金URL地址爬取对应基金的近1个月、近3个月、近6个月、近1年、近3年、成立来的变动百分比。
图片.png
二、运行环境
Python3
requests
MongoDb
bs4
pymongo
re
由于python2的字符编码问题确实让人蛋疼,所以今后的试验项目全部改成python3开发,下面会详细介绍蛋疼的原因。
三、实例分析
页面一分析
天天基金网这个页面所有从0至7开头的基金代码分别放在'class="num_box"对应的8个div中,其中每个li对应的就是基金所有信息,最后我们用正则表达式就可以取到我们需要的基金名称、基金代码和URL地址。
图片.png
取所有li基金信息用BeautifulSoup的select方法:
select('.num_right > li')
用循环方法取每个基金信息,并配合正则表达式,就可以得到我们需要的基金名称、基金代码和url地址。
for tag in tags:
content=tag.a.text #取第一个的文本数据
code=re.findall(r'\d+',content)[0] #\d+从文本数据里取数字,位数至少大于等于1位,正则表达式取得的结果用列表,所以后面用[0]取出数据
name=content.split(')')[1] #用中文')'分割取第二个值得到基金名称
七个.num中的最后一个
里面的内容为空值,需要在此做判断,否则会提示:not of index
if tag.a is None:
contine #如果为空值,跳过
else:
两个页面分别用了两种编码方式,第一个页面是gb2312,第二个页面是utf-8,所以分别定义了2个不同编码函数,供两个页面调用
图片.png
html=requests.get(url,headers=header).content.decode('gbk')
#gbk编码扩展了gb2312,还支持中文繁体
html=requests.get(url,headers=header).content.decode('utf-8')
页面二分析
从页面1传给页面2的url地址,url格式如:http://fund.eastmoney.com/000001.html 可以分析得出需要的数据放在dd 标签里。
图片.png
先用BeautifulSoup的select方法搜索到。
再用find_all方法获取dd标签里的第二个span标签。
tags=soup.select('dd')
m1=(tags[1].find_all('span')[1].string)
y1=(tags[2].find_all('span')[1].string)
m3=(tags[4].find_all('span')[1].string)
y3=(tags[5].find_all('span')[1].string)
m6=(tags[7].find_all('span')[1].string)
rece=(tags[8].find_all('span')[1].string)
detail={'代码':code,'名称':name,'近1月':m1,'近3月':m3,'近6月':m6,'近1年':y1,'近3年':y3,'成立来':rece}
但当用以上方法获取信息到基金代码000009时,又提示错误“IndexError: list index out of range”,经分析从页面1获取的url地址在页面2生成的页面有2种布局方式。
于是再写一个函数获取第二种布局方式
tags=soup.find_all(class_='ui-font-middle ui-color-red ui-num')
m1=tags[3].string
y1=tags[4].string
m3=tags[5].string
y3=tags[6].string
m6=tags[7].string
rece=tags[8].string
detail={'代码':code,'名称':name,'近1月':m1,'近3月':m3,'近6月':m6,'近1年':y1,'近3年':y3,'成立来':rece}
在第一个方法里加入try...except... 捕捉错误,当遇到错误时运行第二个函数
把requests和BeautifulSoup单独写成一个模块,以便给其他函数共用。
from bs4 import BeautifulSoup
import requests,random
def geturl_gbk(url):
html=requests.get(url,headers=header).content.decode('gbk')
soup=BeautifulSoup(html,'lxml')
return soup
def geturl_utf8(url):
html=requests.get(url,headers=header).content.decode('utf-8')
soup=BeautifulSoup(html,'lxml')
return soup
导入MongoDb数据库
import pymongo
clients=pymongo.MongoClient('127.0.0.1')
#建立链接
db=clients['hexun']
#指定数据库
col1=db['fund']
#返回数据集合1
col2=db['detail']
#返回数据集合2
四、实战代码
代码贴图:
getstart模块
getstart.png
eastmoney1.png
eastmoney2.png
完整代码在github:
On GitHub : Click Here-> 爬取天天基金网代码
五、MongoDb数据截图
mongodb1.png
mongodb2.png
六、总结
requests.content和requests.text的方法.content返回的是二进制内容要用decode指定编码;text根据网页编码响应内容来猜测编码,但此处依旧要指定编码.
requests.content方法:
html=requests.get(url).content.decode('gbk')
print (html)
request.text方法
html=requests.get(url)
html.encoding='gbk'
print (html.text)
此网站会判断爬虫,断开连接,如下提示:
("Connection broken: ConnectionResetError(104, 'Connection reset by peer')", ConnectionResetError(104, 'Connection reset by peer'))
所以加上了随机代理
proxies=['http://118.178.124.33:3128',
'http://139.129.166.68:3128',
'http://61.163.39.70:9999',
'http://61.143.228.162']
html=requests.get(url,headers=header,proxies={'http':random.choice(proxies)}).content.decode('gbk')
python爬取天天基金网_Python爬虫日记二:爬取天天基金网相关推荐
- python爬取天天基金_Python爬虫日记二:爬取天天基金网
一.前言 这次的实验的任务是要爬取天天基金网的6000多个基金,并把爬取的数据存放到Mongodb数据库中,数据以供下次分析使用.而此次 需要采集的数据来自两个页面 页面1:从该页面爬取 所有基金代码 ...
- Python 柱状图 横坐标 名字_Python爬虫实例(二)——爬取新馆疫情每日新增人数
python是世界上最美的语言. 大家好,我是Henry! 疫情以来,相信大家每天都关注着疫情的实时动态,许多网站上也post了疫情的相关资料. 百香园 百度 各个网站都会统计每日新增,刚学了Matp ...
- python 爬视频下载_Python爬虫进阶之爬取某视频并下载的实现
这篇文章我们来讲一下在网站建设中,Python爬虫进阶之爬取某视频并下载的实现.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 这几天在家闲得无聊,意外的挖掘到了一个资源网站 ...
- python爬虫-爬妹子图_Python 爬虫入门之爬取妹子图
Python 爬虫入门之爬取妹子图 来源:李英杰 链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果 ...
- python制作词典软件_Python爬虫之二:自制简易词典
运行平台: Windows Python版本: Python3.6 IDE: PyCharm 其他工具:Chrome浏览器 作为一个程序员,会经常查阅一些技术文档和技术网站,很多都是英文的,遇到不认识 ...
- python view函数_Python爬虫实例(二)——爬取新馆疫情每日新增人数
python是世界上最美的语言. 大家好,我是Henry! 疫情以来,相信大家每天都关注着疫情的实时动态,许多网站上也post了疫情的相关资料. 百香园 百度 各个网站都会统计每日新增,刚学了Matp ...
- python爬虫妹子图_Python 爬虫入门(二)——爬取妹子图
Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. 公众号:[智能制造社区].欢迎关注,分享智能制造与编程那些事. 爬虫成果 当你运行代码后,文件夹就会 ...
- python下载电影天堂_Python爬虫初学:爬取电影天堂数据
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于IT共享之家,作者:IT共享者 [一.项目背景] 相信大家都有一种头疼的体验,要下载 ...
- python爬虫爬取教程_python爬虫实战之爬取京东商城实例教程
前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1. ...
- python爬虫爬图片教程_python爬虫实战之爬取京东商城实例教程
前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1. ...
最新文章
- BERT大火却不懂Transformer?读这一篇就够了 原版 可视化机器学习 可视化神经网络 可视化深度学习...20201107
- 一 梳理 从 HDFS 到 MR。
- 视频会说话:神策智能运营,让你半小时搞定一次活动!
- for循环中执行setTimeout问题(任务队列的问题)
- Project Tango 的一些应用
- 指标公式c语言源码下载,自用的一个不错的指标 (源码、附图、副图)
- enum操作--获取枚举里的最大值
- .NET for Apache Spark 1.0 版本发布
- 解决:single failed: For artifact {null:null:null:jar}: The groupId cannot be empty. 把工程依赖的jar包打到入jar中
- C语言实现单链表面试题汇总
- 【我的物联网成长记17】一条物联网设备控制命令的一生
- 【kafka】kafka 执行 多个脚本 kafka-run-class.sh 导致 server 节点 时不时挂掉
- flex4自定义皮肤
- H3C的静态路由、Track与NQA联动配置举例
- Qt 学习之路 2(3):Hello, world!
- DC888 : worklist slovers
- oracle临时表空间自动清理,Oracle 临时表空间满的清理
- android root后手机文件管理器,Android超强文件管理器:Root Explorer
- 开发STM32MP1,离不开一个好开发板
- win10一直显示无网络连接到服务器,win10的网络为什么会有时显示无法连接到internet...
热门文章
- 实数系的基本定理_11、实数的连续性(1)
- 贪心法(作业调度问题)
- r语言boxcox异方差_R教程-15:线性回归中的异方差
- 分享抖音上热门技巧!短视频涨粉+运营攻略!
- 安卓ASO怎么做?有哪些工具平台?安卓aso工具有哪些
- 虚拟机怎样使用代理服务器上网,VMware虚拟机使用NAT模式上网的方法
- SPSS联合Excel进行logistic回归亚组交互效应(交互作用)的可视化分析
- 韩国服务器性能排行榜,2019韩国云服务器排名
- udp buffer 和reassemble buffer
- 网络可视化工具netron详细安装流程