前言

入门爬虫很容易,几行代码就可以,可以说是学习 Python 最简单的途径。

刚开始动手写爬虫,你只需要关注最核心的部分,也就是先成功抓到数据,其他的诸如:下载速度、存储方式、代码条理性等先不管,这样的代码简短易懂、容易上手,能够增强信心。

基本环境配置

版本: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.text return None except 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))

进群获取更多项目源码以及教程:960410445

结语

这个过程觉得很自然,因为每次修改都是针对一个小点,一点点去学,搞懂后添加进来,而如果让你上来就直接写出这几十行的代码,你很可能就放弃了。

所以,你可以看到,入门爬虫是有套路的,最重要的是给自己信心。

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

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

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

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

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

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

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

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

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

  5. html代码大全(很全的)_5行Python代码就能爬取 3000+ 上市公司的信息?

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

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

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

  7. Python爬虫项目--爬取某宝男装信息

    本次爬取用到的知识点有: 1. selenium 2. pymysql 3  pyquery ''' 文章:Python爬虫项目--爬取某宝男装信息 作者:Star_Zhao 源自:https://w ...

  8. python+scrapy简单爬取淘宝商品信息

    python结合scrapy爬取淘宝商品信息 一.功能说明: 已实现功能: 通过scrapy接入selenium获取淘宝关键字搜索内容下的商品信息. 待扩展功能: 爬取商品中的全部其他商品信息. 二. ...

  9. python爬取知乎文章_大佬分享Python编程实现爬取知乎用户信息的例子

    有一天 , 我发现我心仪已久的妹子在朋友圈里分享了知乎专栏的文章 , 就知道她也刷知乎 . 如果在知乎上关注她 , 我就能知道 , 她最近关注什么 , 心里想些什么 , 了解了解她喜欢的方面 , 还能 ...

最新文章

  1. 注释工具_好用的位点分级注释工具,VarSome插件
  2. tcc分布式事务_什么是 TCC分布式事务?
  3. 台式电脑打不开计算机c盘,电脑电脑C盘打不开怎么办(计算机应用范文)
  4. Matlab概率统计编程指南
  5. Spring Jpa 返回自定义实体
  6. 惹恼程序员的10件事
  7. 雄安新区区块链底层系统(1.0)今日正式发布
  8. C语言Socket编程(计算机网络作业)
  9. 洛谷 P1558 色板游戏
  10. Python 解决面试题47 不用加减乘除做加法
  11. python雷达图的相似度_Python教程:matplotlib实现雷达图和柱状图
  12. PHP报错:Malformed UTF-8 characters, possibly incorrectly encoded
  13. 文章最重要的并不是原创,而是伪原创
  14. 认识CodeSmith
  15. 第九篇:人生中哪些是对错的选择?
  16. 爱荷华州立大学计算机科学,2020年爱荷华州立大学排名TFE Times美国最佳计算机科学硕士专业排名第63...
  17. 杀人游戏规则总结(转自龙的天空)
  18. Caused by: java.lang.Error: Unresolved compilation problems:解决办法
  19. 重复启动Tomcat时,大概率出现Deploying web application direct
  20. 火绒浏览器怎样禁用js进行文件上传漏洞测试

热门文章

  1. (八)boost库之异常处理
  2. 玩转Google开源C++单元测试框架Google Test系列(gtest)之八 - 打造自己的单元测试框架
  3. 2_3 ProxyMode.cpp 代理模式
  4. GStreamer 入门 - Hello,World
  5. Cronet android 设计与实现分析——备选服务机制
  6. C++ 类和对象(一):类的概念、类的访问控制和封装、类对象模型、this指针
  7. leetcode-136. 只出现一次的数字解法
  8. 如果我是面试官,我会问你 Spring 那些问题?
  9. 下次遇到嚣张的候选人就先这么问:系统变慢了你怎么搞?
  10. 高并发场景下 disk io 引发的高时延问题