爬虫2:html页面+beautifulsoap模块+post方式+demo
爬取html页面,有时需要设置参数post方式请求,生成json,保存文件中。
1)引入模块
import requests
from bs4 import BeautifulSoup
url_ = 'http://www.c.....................'
2)设置参数
datas = {
'yyyy':'',
'mm':'-12-31',
'cwzb':"incomestatements",
'button2':"%CC%E1%BD%BB",
}
3)post请求
r = requests.post(url,data = datas)
4)设置编码
r.encoding = r.apparent_encoding
5)BeautifulSoup解析request请求
soup = BeautifulSoup(r.text)
6)find_all筛选
soup.find_all('strong',text=re.compile(u"股票代码"))[].parent.contents[]
7)css选择select
soup.select("option[selected]")[].contents[]
beautifulsoap的API请查看 https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#beautifulsoup
Demo:文件读url,设置参数,post方式,beautifulsoap解析,生成json,保存文件中
import requests
from bs4 import BeautifulSoup
import re
import json
import time fd = open(r"E:\aa.txt","r")
mylist = []
for line in fd:
mylist.append(line)
url_pre = 'http://www.c.....................'
code = open(r"E:\a---.txt", "a")
for index in xrange(,len(mylist)): print index
url_id = mylist[index].split('?')[-]
url_id = url_id[-:-] datas = {
'yyyy':'',
'mm':'-12-31',
'cwzb':"incomestatements",'button2':"%CC%E1%BD%BB",
}
url = url_pre + str(url_id)
print url
print datas r = requests.post(url,data = datas)
r.encoding = r.apparent_encoding
print r
soup = BeautifulSoup(r.text) r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text) if len(soup.find_all("td",text=re.compile(u"营业收入"))) == :
continue jsonMap = {} jsonMap[u'股票代码'] = soup.find_all('strong',text=re.compile(u"股票代码"))[].parent.contents[]
jsonMap[u'股票简称'] = soup.find_all('strong',text=re.compile(u"股票代码"))[].parent.contents[] jsonMap[u'年度'] = soup.select("option[selected]")[].contents[]
jsonMap[u'报告期'] = soup.select("option[selected]")[].contents[] yysr = soup.find_all("td",text=re.compile(u"营业收入"))[].parent
yysrsoup = BeautifulSoup(str(yysr))
jsonMap[u'营业收入'] = yysrsoup.find_all('td')[].contents[] yylr = soup.find_all("td",text=re.compile(u"营业利润"))[].parent
yylrsoup = BeautifulSoup(str(yylr))
jsonMap[u'营业利润'] = yylrsoup.find_all('td')[].contents[] strJson = json.dumps(jsonMap, ensure_ascii=False)
print strJson
#code.write(strJson)
code.write(strJson.encode('utf-8') + '\n')
time.sleep(0.1)
code.flush()
爬虫2:html页面+beautifulsoap模块+post方式+demo的更多相关文章
- 爬虫1:html页面+beautifulsoap模块+get方式+demo
前言:最近公司要求编写一个爬虫,需要完善后续金融项目的数据,由于工作隐私,就不付被爬的网址url了,下面总结下spider的工作原理. 语言:python:工具:jupyter: 概要:说到爬虫 ...
- 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的用法, ...
随机推荐
- opencv边缘检测报错
cnts = cv2.findContours(edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)cnts = cnts[0] if ...
- 实现一个extend函数
NOW,今天让我们来实现一个extend函数. 具体思路: 使用Object.defineProperty()对属性的特性进行设置,然后通过Object.getOwnPropertyDescripto ...
- 你好,C语言
对于我来说,C语言就和陌生人一样,对他完全不了解,更不要提什么C++了,这就要我主动和他打招呼,深入认识了解它了哈.目前对于C语言的理解,只知道他的的功强大,能操作硬件,编写各类驱动,强悍的LINUX ...
- jmeter 遍历数据库
- Python 2.X和3.X主要区别和下载安装
一.python 2.X和3.X的区别 https://wenda.so.com/q/1459639143721779?src=140 二.Python的下载安装 1.Python下载 在python ...
- Qt for Android开发入门
1. Qt for Android环境搭建 1.1 打包需要的工具 1.2 JDK安装 如果之前配置过,就可以跳过这一步. 下载java jdk 64:java jdk 1.8 x64 ...
- LCX使用心得
最近在搞内网渗透,碰到 端口转发&边界处理 的时候,我们就可以借助一些小工具了,这类工具有很多,这里主要说明lcx的用法. lcx是个很老的端口转发工具,而它的使用也很简单.不过想要把lcx玩 ...
- 【linux】【docker】docker及docker-compose安装
安装 一. docker安装 Centos 安装docker18.03 wget https://download.docker.com/linux/centos/7/x86_64/stable/Pa ...
- [Vue warn]: Duplicate keys detected: 'area'. This may cause an update error.
运行vue程序,浏览器报错: 原因:检测到重复的密钥:'area',因为在使用v-for循环绑定的时候,key的值是唯一的,不能相同,否则会出现意想不到的bug 解决办法:v-for时绑定的key唯一
- 洗牌Shuffle'm Up POJ-3087 模拟
题目链接:Shuffle'm Up 题目大意 模拟纸牌的洗牌过程,已知两个牌数相等的牌堆.求解经过多少次洗牌的过程,使牌的顺序与目标顺序相同. 思路 直接模拟,主要是字符串的操作.问题是,如何判断出不 ...