这是第一次用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包爬取股票信息网站的更多相关文章

  1. 利用python的requests和BeautifulSoup库爬取小说网站内容

    1. 什么是Requests? Requests是用Python语言编写的,基于urllib3来改写的,采用Apache2 Licensed 来源协议的HTTP库. 它比urllib更加方便,可以节约 ...

  2. Requests+BeautifulSoup+正则表达式爬取猫眼电影Top100(名称,演员,评分,封面,上映时间,简介)

    # encoding:utf-8 from requests.exceptions import RequestException import requests import re import j ...

  3. python利用urllib实现的爬取京东网站商品图片的爬虫

    本例程使用urlib实现的,基于python2.7版本,采用beautifulsoup进行网页分析,没有第三方库的应该安装上之后才能运行,我用的IDE是pycharm,闲话少说,直接上代码! # -* ...

  4. python3+requests+BeautifulSoup+mysql爬取豆瓣电影top250

    基础页面:https://movie.douban.com/top250 代码: from time import sleep from requests import get from bs4 im ...

  5. python3.6 利用requests和正则表达式爬取猫眼电影TOP100

    import requests from requests.exceptions import RequestException from multiprocessing import Pool im ...

  6. 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论

    这篇文章,我们继续利用 requests 和 xpath 爬取豆瓣电影的短评,下面还是先贴上效果图: 1.网页分析 (1)翻页 我们还是使用 Chrome 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...

  7. 爬虫系列2:Requests+Xpath 爬取租房网站信息

    Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...

  8. 爬虫系列(十) 用requests和xpath爬取豆瓣电影

    这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...

  9. python之简单爬取一个网站信息

    requests库是一个简介且简单的处理HTTP请求的第三方库 get()是获取网页最常用的方式,其基本使用方式如下 使用requests库获取HTML页面并将其转换成字符串后,需要进一步解析HTML ...

随机推荐

  1. 《Three.js 入门指南》3.1.1 - 基本几何形状 -多面体

    3.1 基本几何形状 多面体 构造函数 正四面体(TetrahedronGeometry).正八面体(OctahedronGeometry).正二十面体(IcosahedronGeometry)的构造 ...

  2. 如何优雅的将文件转换为字符串(环绕执行模式&行为参数化&函数式接口|Lambda表达式)

    首先我们讲几个概念: 环绕执行模式: 简单的讲,就是对于OI,JDBC等类似资源,在用完之后需要关闭的,资源处理时常见的一个模式是打开一个资源,做一些处理,然后关闭资源,这个设置和清理阶段类似,并且会 ...

  3. 非参数估计——核密度估计(Parzen窗)

    核密度估计,或Parzen窗,是非参数估计概率密度的一种.比如机器学习中还有K近邻法也是非参估计的一种,不过K近邻通常是用来判别样本类别的,就是把样本空间每个点划分为与其最接近的K个训练抽样中,占比最 ...

  4. RedHat7.4配置yum网络源

    本次RedHat版本为:Red Hat Enterprise Linux Server release 7.4 (Maipo). 将RedHat7.4的yum源替换为免费的CentOS对应版本yum源 ...

  5. python--匿名函数、文件操作

    一.匿名函数 语法: sum = lambda arg1, arg2: arg1 + arg2 #调用sum函数 print "Value of total : ", sum( 1 ...

  6. 2017蓝桥杯Excel地址(C++C组)

    题目:Excel地址Excel单元格的地址表示很有趣,它使用字母来表示列号.比如,A表示第1列,B表示第2列,Z表示第26列,AA表示第27列,AB表示第28列,BA表示第53列,....当然Exce ...

  7. 数据结构-Python 字典

    字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示 d = ...

  8. 33 File 文件及目录操作

    /* * File:文件和目录路径名的抽象表示形式,File 类的实例是不可变的 * * 构造方法: * File(String pathname) 将指定的路径名转换成一个File对象 * File ...

  9. Markdown自动生成目录

    Markdown自动生成目录 使用npm语法生成 1.安装npm 2.安装doctoc插件 3.执行生成 参考 Markdown自动生成目录 使用npm语法生成 1.安装npm 我的系统是deepin ...

  10. Git应用详解第八讲:Git标签、别名与Git gc

    前言 前情提要:Git应用详解第七讲:Git refspec与远程分支的重要操作 这一节主要介绍Git标签.别名与Git的垃圾回收机制. 一.Git标签(tag) 1.标签的实质 标签与分支十分相似, ...