html代码大全(很全的)_5行Python代码就能爬取 3000+ 上市公司的信息?
前言
入门爬虫很容易,几行代码就可以,可以说是学习 Python 最简单的途径。
刚开始动手写爬虫,你只需要关注最核心的部分,也就是先成功抓到数据,其他的诸如:下载速度、存储方式、代码条理性等先不管,这样的代码简短易懂、容易上手,能够增强信心。
作者:苏克
源自:
https://www.makcyun.top/web_scraping_withpython18.html
基本环境
配置
版本:Python3
系统:Windows
相关模块:pandas、csv
爬取
目标网站
实现
代码
import pandas as pdimport csvfor i in range(1,178): # 爬取全部页 tb = pd.read_html('http://s.askci.com/stock/a/?reportTime=2017-12-31&pageNum=%s' % (str(i)))[3] tb.to_csv(r'1.csv', mode='a', encoding='utf_8_sig', header=1, index=0)
(左右滑动可查看完整代码)
3000+ 上市公司的信息,安安静静地躺在 Excel 中:
有了上面的信心后,我开始继续完善代码,因为 5 行代码太单薄,功能也太简单,大致从以下几个方面进行了完善:
增加异常处理
由于爬取上百页的网页,中途很可能由于各种问题导致爬取失败,所以增加了 try except 、if 等语句,来处理可能出现的异常,让代码更健壮。
增加代码灵活性
初版代码由于固定了 URL 参数,所以只能爬取固定的内容,但是人的想法是多变的,一会儿想爬这个一会儿可能又需要那个,所以可以通过修改 URL 请求参数,来增加代码灵活性,从而爬取更灵活的数据。
修改存储方式
初版代码我选择了存储到 Excel 这种最为熟悉简单的方式,人是一种惰性动物,很难离开自己的舒适区。但是为了学习新知识,所以我选择将数据存储到 MySQL 中,以便练习 MySQL 的使用。
加快爬取速度
初版代码使用了最简单的单进程爬取方式,爬取速度比较慢,考虑到网页数量比较大,所以修改为了多进程的爬取方式。
经过以上这几点的完善,代码量从原先的 5 行增加到了下面的几十行:
import requestsimport pandas as pdfrom bs4 import BeautifulSoupfrom lxml import etreeimport timeimport pymysqlfrom sqlalchemy import create_enginefrom urllib.parse import urlencode # 编码 URL 字符串start_time = time.time() #计算程序运行时间def get_one_page(i):try: headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36' } paras = {'reportTime': '2017-12-31',#可以改报告日期,比如2018-6-30获得的就是该季度的信息'pageNum': i #页码 } url = 'http://s.askci.com/stock/a/?' + urlencode(paras) response = requests.get(url,headers = headers)if response.status_code == 200:return response.textreturn Noneexcept RequestException: print('爬取失败')def parse_one_page(html): soup = BeautifulSoup(html,'lxml') content = soup.select('#myTable04')[0] #[0]将返回的list改为bs4类型 tbl = pd.read_html(content.prettify(),header = 0)[0]# prettify()优化代码,[0]从pd.read_html返回的list中提取出DataFrame tbl.rename(columns = {'序号':'serial_number', '股票代码':'stock_code', '股票简称':'stock_abbre', '公司名称':'company_name', '省份':'province', '城市':'city', '主营业务收入(201712)':'main_bussiness_income', '净利润(201712)':'net_profit', '员工人数':'employees', '上市日期':'listing_date', '招股书':'zhaogushu', '公司财报':'financial_report', '行业分类':'industry_classification', '产品类型':'industry_type', '主营业务':'main_business'},inplace = True)return tbldef generate_mysql(): conn = pymysql.connect( host='localhost', user='root', password='******', port=3306, charset = 'utf8', db = 'wade') cursor = conn.cursor() sql = 'CREATE TABLE IF NOT EXISTS listed_company (serial_number INT(20) NOT NULL,stock_code INT(20) ,stock_abbre VARCHAR(20) ,company_name VARCHAR(20) ,province VARCHAR(20) ,city VARCHAR(20) ,main_bussiness_income VARCHAR(20) ,net_profit VARCHAR(20) ,employees INT(20) ,listing_date DATETIME(0) ,zhaogushu VARCHAR(20) ,financial_report VARCHAR(20) , industry_classification VARCHAR(20) ,industry_type VARCHAR(100) ,main_business VARCHAR(200) ,PRIMARY KEY (serial_number))' cursor.execute(sql) conn.close()def write_to_sql(tbl, db = 'wade'): engine = create_engine('mysql+pymysql://root:******@localhost:3306/{0}?charset=utf8'.format(db))try: tbl.to_sql('listed_company2',con = engine,if_exists='append',index=False)# append表示在原有表基础上增加,但该表要有表头except Exception as e: print(e)def main(page): generate_mysql()for i in range(1,page): html = get_one_page(i) tbl = parse_one_page(html) write_to_sql(tbl)# # 单进程if __name__ == '__main__': main(178) endtime = time.time()-start_time print('程序运行了%.2f秒' %endtime)# 多进程from multiprocessing import Poolif __name__ == '__main__': pool = Pool(4) pool.map(main, [i for i in range(1,178)]) #共有178页 endtime = time.time()-start_time print('程序运行了%.2f秒' %(time.time()-start_time))
(左右滑动可查看完整代码)
结语
这个过程觉得很自然,因为每次修改都是针对一个小点,一点点去学,搞懂后添加进来,而如果让你上来就直接写出这几十行的代码,你很可能就放弃了。
所以,你可以看到,入门爬虫是有套路的,最重要的是给自己信心。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对小编的支持。
原创《Python最强基础学习文档》,戳我领取!
原创《Excel数据透视表》大全,戳我领取!
原创《python自动化办公手册》,戳我领取!
html代码大全(很全的)_5行Python代码就能爬取 3000+ 上市公司的信息?相关推荐
- 爬取三千条数据需要多久_只需几十行代码,Python就能轻松爬取 3000+ 上市公司的信息...
点击关注"Python学习与数据挖掘" 更多超级干货第一时间推送给你哦!!! 入门爬虫很容易,几行代码就可以,可以说是学习 Python 最简单的途径.刚开始动手写爬虫,你只需要关 ...
- python爬虫代码1000行-几行Python代码爬取3000+上市公司的信息
几行Python代码爬取3000+上市公司的信息 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 几行Python代码爬取3000+上市公司的信息.txt ] (友情提示:右键 ...
- python 机器学习 爬取关键字_5行Python就能爬取 3000+ 上市公司的信息?
↑↑↑点击上方蓝字,回复资料,10个G的惊喜作者:苏克源自:https://www.makcyun.top/web_scraping_withpython18.html入门爬虫很容易,几行代码就可以, ...
- 5行Python代码爬取3000+ 上市公司的信息
基本环境配置 版本:Python3 系统:Windows 相关模块:pandas.csv 爬取目标网站 实现代码 import pandas as pd import csv for i in ran ...
- 5行Python就能爬取 3000+ 上市公司的信息?
作者:苏克 源自:https://www.makcyun.top/web_scraping_withpython18.html 入门爬虫很容易,几行代码就可以,可以说是学习 Python 最简单的途径 ...
- python serial_Python代码爬取3000+ 上市公司的信息!能上市的都有这样一个特点
前言 入门爬虫很容易,几行代码就可以,可以说是学习 Python 最简单的途径. 刚开始动手写爬虫,你只需要关注最核心的部分,也就是先成功抓到数据,其他的诸如:下载速度.存储方式.代码条理性等先不管, ...
- python一百行代码多少钱_用86行Python代码模拟太阳系
Python代码模拟的太阳系,包括了水星(Mercury), 金星(Venus),地球(Earth),月球(Moon),火星(Mars) 上面的动画是我用86行Python代码模拟的一个比较真实的太阳 ...
- 计算器百分号如何用代码实现_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?...
每天我都要坐地铁上班,而地铁里信号差.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫.我并没有打算做很漂亮的应用,所以只完成了原型,它可以满足我最基本的需求.其思路很简单: 找到新闻源:用 ...
- python爬图片代码大全_爬虫入门教程⑩— 用漂亮的图表展示爬取到的数据
经过了前面的努力,我们成功获取到了数据,并且学会了保存,但是只是用网页展示出来,是不是有一些不够美观呢? 所以本节的内容是:数据的可视化.拿到了数据却不能使其简单易懂并且足够突出,那就是不是好的数据工 ...
最新文章
- Windows7无法访问共享文件夹(0x800704cf,0x80070035)解决方法
- shell单例-处理方案
- Spring.net与Asp.net Mvc结合示例《转载》
- 前端基础知识整理汇总(上)
- py文件控制台执行时,报错:引入的模块不存在
- Quartz + spring 定时任务常见错误总结
- 11月22日弹性计算跟您在广州不见不散
- centos 7 安装 npm 工具
- android 字符串替换_Android开发之旅:android架构
- python内置函数 exec eval compile
- 今晚20:00整!中国首个量子计算操作系统即将发布
- Oracle Data Integrator(ODI)架构
- 手持式水质监测仪在污水处理中的应用
- Bluetooth Core Architecture Blocks----蓝牙核心架构
- 关于vite配置postcss未生效问题
- 计算机网络实践的体会,计算机网络实训心得体会
- TabLayout+ViewPager+Fragment实现切页展示
- .cxx_destruct crash
- ios .mm文件调用c语言函数报错,深入浅出 iOS 编译
- 2016文件储存服务器,测试Windows Server 2016存储池教程
热门文章
- “北航Clubs” Beta版本开发目标
- ASP.NET缓存之 没有为 SQL 缓存通知启用数据库“ReplaceShop”。
- 表中的数据导出为insert语句的简单方法
- 人工智能到底是什么?人工智能如何改变社会?中国的人工智能应该做怎样的探索?
- c++新特性11 (10)shared_ptr六”构造函数unique_ptr参数“
- C++ Primer 5th笔记(chap 19 特殊工具与技术)type_info 类
- 基于区块链的健康链系统设计与实现(1)引言
- buu [BJDCTF 2nd]老文盲了
- [BSidesSF2019]slashslash
- java项目(注册和登录(成功后查看商品的信息))