前言

入门爬虫很容易,几行代码就可以,可以说是学习 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+ 上市公司的信息?相关推荐

  1. 爬取三千条数据需要多久_只需几十行代码,Python就能轻松爬取 3000+ 上市公司的信息...

    点击关注"Python学习与数据挖掘" 更多超级干货第一时间推送给你哦!!! 入门爬虫很容易,几行代码就可以,可以说是学习 Python 最简单的途径.刚开始动手写爬虫,你只需要关 ...

  2. python爬虫代码1000行-几行Python代码爬取3000+上市公司的信息

    几行Python代码爬取3000+上市公司的信息 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 几行Python代码爬取3000+上市公司的信息.txt ] (友情提示:右键 ...

  3. python 机器学习 爬取关键字_5行Python就能爬取 3000+ 上市公司的信息?

    ↑↑↑点击上方蓝字,回复资料,10个G的惊喜作者:苏克源自:https://www.makcyun.top/web_scraping_withpython18.html入门爬虫很容易,几行代码就可以, ...

  4. 5行Python代码爬取3000+ 上市公司的信息

    基本环境配置 版本:Python3 系统:Windows 相关模块:pandas.csv 爬取目标网站 实现代码 import pandas as pd import csv for i in ran ...

  5. 5行Python就能爬取 3000+ 上市公司的信息?

    作者:苏克 源自:https://www.makcyun.top/web_scraping_withpython18.html 入门爬虫很容易,几行代码就可以,可以说是学习 Python 最简单的途径 ...

  6. python serial_Python代码爬取3000+ 上市公司的信息!能上市的都有这样一个特点

    前言 入门爬虫很容易,几行代码就可以,可以说是学习 Python 最简单的途径. 刚开始动手写爬虫,你只需要关注最核心的部分,也就是先成功抓到数据,其他的诸如:下载速度.存储方式.代码条理性等先不管, ...

  7. python一百行代码多少钱_用86行Python代码模拟太阳系

    Python代码模拟的太阳系,包括了水星(Mercury), 金星(Venus),地球(Earth),月球(Moon),火星(Mars) 上面的动画是我用86行Python代码模拟的一个比较真实的太阳 ...

  8. 计算器百分号如何用代码实现_如何用 100 行 Python 代码实现新闻爬虫?这样可算成功?...

    每天我都要坐地铁上班,而地铁里信号差.但我希望在坐地铁的时候读些新闻,于是就写了下面这个新闻爬虫.我并没有打算做很漂亮的应用,所以只完成了原型,它可以满足我最基本的需求.其思路很简单: 找到新闻源:用 ...

  9. python爬图片代码大全_爬虫入门教程⑩— 用漂亮的图表展示爬取到的数据

    经过了前面的努力,我们成功获取到了数据,并且学会了保存,但是只是用网页展示出来,是不是有一些不够美观呢? 所以本节的内容是:数据的可视化.拿到了数据却不能使其简单易懂并且足够突出,那就是不是好的数据工 ...

最新文章

  1. Windows7无法访问共享文件夹(0x800704cf,0x80070035)解决方法
  2. shell单例-处理方案
  3. Spring.net与Asp.net Mvc结合示例《转载》
  4. 前端基础知识整理汇总(上)
  5. py文件控制台执行时,报错:引入的模块不存在
  6. Quartz + spring 定时任务常见错误总结
  7. 11月22日弹性计算跟您在广州不见不散
  8. centos 7 安装 npm 工具
  9. android 字符串替换_Android开发之旅:android架构
  10. python内置函数 exec eval compile
  11. 今晚20:00整!中国首个量子计算操作系统即将发布
  12. Oracle Data Integrator(ODI)架构
  13. 手持式水质监测仪在污水处理中的应用
  14. Bluetooth Core Architecture Blocks----蓝牙核心架构
  15. 关于vite配置postcss未生效问题
  16. 计算机网络实践的体会,计算机网络实训心得体会
  17. TabLayout+ViewPager+Fragment实现切页展示
  18. .cxx_destruct crash
  19. ios .mm文件调用c语言函数报错,深入浅出 iOS 编译
  20. 2016文件储存服务器,测试Windows Server 2016存储池教程

热门文章

  1. “北航Clubs” Beta版本开发目标
  2. ASP.NET缓存之 没有为 SQL 缓存通知启用数据库“ReplaceShop”。
  3. 表中的数据导出为insert语句的简单方法
  4. 人工智能到底是什么?人工智能如何改变社会?中国的人工智能应该做怎样的探索?
  5. c++新特性11 (10)shared_ptr六”构造函数unique_ptr参数“
  6. C++ Primer 5th笔记(chap 19 特殊工具与技术)type_info 类
  7. 基于区块链的健康链系统设计与实现(1)引言
  8. buu [BJDCTF 2nd]老文盲了
  9. [BSidesSF2019]slashslash
  10. java项目(注册和登录(成功后查看商品的信息))