爬虫1:html页面+beautifulsoap模块+get方式+demo
前言:最近公司要求编写一个爬虫,需要完善后续金融项目的数据,由于工作隐私,就不付被爬的网址url了,下面总结下spider的工作原理。
语言:python;工具:jupyter;
概要:说到爬虫spider,就不得不提html页面的解析,说到html页面的解析就不得不提beautifulsoap模块的使用,其对html页面的解析很到位,可以很方便的定位需要爬取的元素。
BeautifulSoap的API: https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
demo流程:
(1)使用requests模块,获取url页面。
import requests
url = "http://www.~~~~~~~~~~~~~~~~~~~~~~~~~~"
r = requests.get(url)
(2)解析html页面(若是pdf页面需要其他工具模块)需要使用BeautifulSoup模块,把request下来的页面信息保存为soup格式。
from bs4 import BeautifulSoup
soup = BeautifulSoup(r.text)
(3)利用soup找到超链接href 并把href保存到文件中,为了后续的使用;
with open(r"E:\aa.txt", "wb") as code:
for link in soup.find_all('a'):
code.write(str(link.get('href')) + '\r\n')
print "Download Complete!"
(4)在上一步的文件中,读取保存的href连接,并保存到list数据结构中;
fd = open(r"E:\juchao.txt","r")
mylist = []for line in fd:
mylist.append(line)
(5)编写header,为了post方式伪装成浏览器(必要的话,设置参数data);并拼接成访问的url格式(利用浏览器调试,查看网络中的信息);
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive',
'Cookie': 'JSESSIONID=27AF575249A833C368677F9B5869A463',
'Host': 'www.cninfo.com.cn',
'Referer': 'http://www.~~~~~~~~~~~~~~~',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0',
'Content-Length': '',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Requested-With': 'XMLHttpRequest',
}
urlpath = 'http://www.cninfo.com.cn/information/brief/szmb'
myUrls = []
for submylist in mylist:
urlId = ''
url = ''
urlId = submylist[-7:-1]
url = urlpath + urlId + '.html'
myUrls.append(url)
(6)新拼接的url是我们需要的最终页面,requests获取url页面(注意编码问题),利用soup解析html页面,生成json字符串,保存到文件。
import json
with open(r"E:\juchao_json.txt", "wb") as code: for k in xrange(len(myUrls)):
r1 = requests.get(myUrls[k])
r1.encoding = r1.apparent_encoding
# print r1.encoding soup = BeautifulSoup(r1.text)
jsonMap = {}
jsonMapKey = []
jsonMapValue = []
for i in soup.select(".zx_data"):
jsonMapKey.append(i.text) for i in soup.select(".zx_data2"):
jsonMapValue.append(i.text[:-]) for j in xrange(len(jsonMapKey)):
jsonMap[jsonMapKey[j]] = jsonMapValue[j] strJson = json.dumps(jsonMap, ensure_ascii=False)
# print strJson
code.write(strJson.encode('utf-8') + '\r\n') print 'Done!'
BeautifulSoap常用API:推荐查看官方文档,见上
1)安装: pip install BeautifulSoap
2 )对象:Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象.
所有对象可以归纳为4种: Tag , NavigableString ,BeautifulSoup , Comment
3)遍历文档:.tag .contents .children .descendants .parent .parents .next_slibling .previous_slibling .next_element
4)搜索文档:find() find_all() find_parents find_next_siblings select
descendants
爬虫1:html页面+beautifulsoap模块+get方式+demo的更多相关文章
- 爬虫2:html页面+beautifulsoap模块+post方式+demo
爬取html页面,有时需要设置参数post方式请求,生成json,保存文件中. 1)引入模块 import requests from bs4 import BeautifulSoup url_ = ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- 爬虫4:pdf页面+pdfminer模块+demo
本文介绍下pdf页面的爬取,需要借助pdfminer模块 demo一般流程: 1)设置url url = 'http://www.------' + '.PDF' 2)requests模块获取url ...
- 【图文详解】scrapy爬虫与动态页面——爬取拉勾网职位信息(2)
上次挖了一个坑,今天终于填上了,还记得之前我们做的拉勾爬虫吗?那时我们实现了一页的爬取,今天让我们再接再厉,实现多页爬取,顺便实现职位和公司的关键词搜索功能. 之前的内容就不再介绍了,不熟悉的请一定要 ...
- 爬虫基础库之requests模块
一.requests模块简介 使用requests可以模拟浏览器请求,比起之前用到的urllib,requests模块的api更加快捷,其实ruquests的本质就是封装urllib3这个模块. re ...
- selenium中webdriver跳转新页面后定位置新页面的两种方式
刚刚在写Python爬虫的时候用到了selenium , 在跳转新页面时发现无法定位新页面 , 查找不到新页面的元素 一番查询后得到了解决方法 , 便记录下来备忘 , 也与大家分享 # 页面跳转代码. ...
- 爬虫抓取页面数据原理(php爬虫框架有很多 )
爬虫抓取页面数据原理(php爬虫框架有很多 ) 一.总结 1.php爬虫框架有很多,包括很多傻瓜式的软件 2.照以前写过java爬虫的例子来看,真的非常简单,就是一个获取网页数据的类或者方法(这里的话 ...
- [嵌入式开发板]iTOP-4412以模块的方式编译驱动
本文转自迅为:http://www.topeetboard.com 大家好,本章节我们将向大家讲解如何在 linux 下实现以模块的方式加载内核驱动.我们以内核里面蜂鸣器的 驱动为例来讲解. 1)首先 ...
- 哎呀,发现自己不会用模块的方式用kprobe啊,弱爆了
在内核外面编译模块,会报warning函数名undefined的错误,解决方法是把函数给export出来:EXPORT_SYMBOL 一直以来,用kprobe比较多的是kprobe event的用法, ...
随机推荐
- a417: 螺旋矩陣
题目: 每行有一正整数T,代表有几组测试数据 接下来有T行,每行有N.M两正整数 N为矩阵长宽,就是会有N*N矩阵 M为方向,M=1为顺时钟,M=2为逆时钟 N范围为1~100之间 思路: 所以,代码 ...
- OAuth2.0摘要
一.简介 不使用oauth2.0协议,资源所有者直接给需要使用资源的第三方应用共享凭据时,有这些问题: 需要直接共享给第三方应用凭据 需要服务器支持密码身份验证 凭据的访问权限过大,失去对访问时间和范 ...
- python unittest+parameterized,单元测试框架+参数化
总要写新的自动化测试模块,在这里把demo记录下来,后面方便自己直接复制粘贴 from nose_parameterized import parameterized import unittest ...
- 我面向 Google 编程,他面向薪资编程
面试官:同学,说一说面向对象有什么好处? 神仙开发者:我觉的面向对象编程没有什么好处. 面试官:为什么(摊手.问号脸)? 神仙开发者:因为在面向对象的时候,我对象总是跟我说话,问我在淘宝上挑的衣服哪个 ...
- vue 条件渲染方式
1.通过class绑定 <div :class="{'div-class': this.align == 'center'}"></div> 对应的css ...
- java 集成Redis 一主多从
1.测试代码如下: public static void main(String[] args) { Set<String> sentinels = new HashSet<Stri ...
- Hbase入门(四)——表结构设计-RowKey
Hbase的表结构设计与关系型数据库有很多不同,主要是Hbase有Rowkey和列族.timestamp这几个全新的概念,如何设计表结构就非常的重要. 创建 Hbase就是通过 表 Rowkey 列族 ...
- 二次编码 深浅拷贝 is和==
1.二次编码 ascii 不支持中文 gbk 支持中文 2个字节 包含ascii Unicode 万国码 python3 内存Unicode utf-8 可变的长度 英文 1字节 欧洲2个字节 亚洲3 ...
- B/S 端 WebGL 3D 游戏机教程
前言 摘要:2D 的俄罗斯方块已经被人玩烂了,突发奇想就做了个 3D 的游戏机,用来玩俄罗斯方块...实现的基本想法是先在 2D 上实现俄罗斯方块小游戏,然后使用 3D 建模功能创建一个 3D 街机模 ...
- Zookeeper工作过程详解
一.Zookeeper工作机制 分布式和集中式系统相比,有很多优势,比如更强的计算能力,存储能力,避免单点故障等问题.但是由于在分布式部署的方式遇到网络故障等问题的时候怎么保证各个节点数据的一致性和可 ...