一、前言

这次的实验的任务是要爬取天天基金网的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爬虫日记二:爬取天天基金网相关推荐

  1. python爬取天天基金_Python爬虫日记二:爬取天天基金网

    一.前言 这次的实验的任务是要爬取天天基金网的6000多个基金,并把爬取的数据存放到Mongodb数据库中,数据以供下次分析使用.而此次 需要采集的数据来自两个页面 页面1:从该页面爬取 所有基金代码 ...

  2. Python 柱状图 横坐标 名字_Python爬虫实例(二)——爬取新馆疫情每日新增人数

    python是世界上最美的语言. 大家好,我是Henry! 疫情以来,相信大家每天都关注着疫情的实时动态,许多网站上也post了疫情的相关资料. 百香园 百度 各个网站都会统计每日新增,刚学了Matp ...

  3. python 爬视频下载_Python爬虫进阶之爬取某视频并下载的实现

    这篇文章我们来讲一下在网站建设中,Python爬虫进阶之爬取某视频并下载的实现.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 这几天在家闲得无聊,意外的挖掘到了一个资源网站 ...

  4. python爬虫-爬妹子图_Python 爬虫入门之爬取妹子图

    Python 爬虫入门之爬取妹子图 来源:李英杰  链接: https://segmentfault.com/a/1190000015798452 听说你写代码没动力?本文就给你动力,爬取妹子图.如果 ...

  5. python制作词典软件_Python爬虫之二:自制简易词典

    运行平台: Windows Python版本: Python3.6 IDE: PyCharm 其他工具:Chrome浏览器 作为一个程序员,会经常查阅一些技术文档和技术网站,很多都是英文的,遇到不认识 ...

  6. python view函数_Python爬虫实例(二)——爬取新馆疫情每日新增人数

    python是世界上最美的语言. 大家好,我是Henry! 疫情以来,相信大家每天都关注着疫情的实时动态,许多网站上也post了疫情的相关资料. 百香园 百度 各个网站都会统计每日新增,刚学了Matp ...

  7. python爬虫妹子图_Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. 公众号:[智能制造社区].欢迎关注,分享智能制造与编程那些事. 爬虫成果 当你运行代码后,文件夹就会 ...

  8. python下载电影天堂_Python爬虫初学:爬取电影天堂数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于IT共享之家,作者:IT共享者 [一.项目背景] 相信大家都有一种头疼的体验,要下载 ...

  9. python爬虫爬取教程_python爬虫实战之爬取京东商城实例教程

    前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1. ...

  10. python爬虫爬图片教程_python爬虫实战之爬取京东商城实例教程

    前言 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1. ...

最新文章

  1. BERT大火却不懂Transformer?读这一篇就够了 原版 可视化机器学习 可视化神经网络 可视化深度学习...20201107
  2. 一 梳理 从 HDFS 到 MR。
  3. 视频会说话:神策智能运营,让你半小时搞定一次活动!
  4. for循环中执行setTimeout问题(任务队列的问题)
  5. Project Tango 的一些应用
  6. 指标公式c语言源码下载,自用的一个不错的指标 (源码、附图、副图)
  7. enum操作--获取枚举里的最大值
  8. .NET for Apache Spark 1.0 版本发布
  9. 解决:single failed: For artifact {null:null:null:jar}: The groupId cannot be empty. 把工程依赖的jar包打到入jar中
  10. C语言实现单链表面试题汇总
  11. 【我的物联网成长记17】一条物联网设备控制命令的一生
  12. 【kafka】kafka 执行 多个脚本 kafka-run-class.sh 导致 server 节点 时不时挂掉
  13. flex4自定义皮肤
  14. H3C的静态路由、Track与NQA联动配置举例
  15. Qt 学习之路 2(3):Hello, world!
  16. DC888 : worklist slovers
  17. oracle临时表空间自动清理,Oracle 临时表空间满的清理
  18. android root后手机文件管理器,Android超强文件管理器:Root Explorer
  19. 开发STM32MP1,离不开一个好开发板
  20. win10一直显示无网络连接到服务器,win10的网络为什么会有时显示无法连接到internet...

热门文章

  1. 实数系的基本定理_11、实数的连续性(1)
  2. 贪心法(作业调度问题)
  3. r语言boxcox异方差_R教程-15:线性回归中的异方差
  4. 分享抖音上热门技巧!短视频涨粉+运营攻略!
  5. 安卓ASO怎么做?有哪些工具平台?安卓aso工具有哪些
  6. 虚拟机怎样使用代理服务器上网,VMware虚拟机使用NAT模式上网的方法
  7. SPSS联合Excel进行logistic回归亚组交互效应(交互作用)的可视化分析
  8. 韩国服务器性能排行榜,2019韩国云服务器排名
  9. udp buffer 和reassemble buffer
  10. 网络可视化工具netron详细安装流程