当前位置:首页 > 网站源码 > 正文内容

python必背入门代码(python必背入门代码打印)

网站源码1年前 (2023-09-28)272

杰哥的IT之旅

杰哥的IT之旅

今天分析一个爬虫小案例,小白或者爬虫入门的小伙伴推荐阅读。

前言

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

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

基本环境配置

版本:Python3

系统:Windows

相关模块:pandas、csv

实现代码importpandas aspd

importcsv

展开全文

fori inrange( 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 行增加到了下面的几十行:

importrequests

importpandas aspd

frombs4 importBeautifulSoup

fromlxml importetree

importtime

importpymysql

fromsqlalchemy importcreate_engine

fromurllib.parse importurlencode # 编码 URL 字符串

start_time = time.time #计算程序运行时间

defget_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'

}

python必背入门代码(python必背入门代码打印)

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)

ifresponse.status_code == 200:

returnresponse.text

returnNone

exceptRequestException:

print( '爬取失败')

defparse_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)

returntbl

defgenerate_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

defwrite_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表示在原有表基础上增加,但该表要有表头

exceptException ase:

print(e)

defmain(page):

generate_mysql

fori inrange( 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)

# 多进程

frommultiprocessing importPool

if__name__ == '__main__':

pool = Pool( 4)

pool.map(main, [i fori inrange( 1, 178)]) #共有178页

endtime = time.time-start_time

print( '程序运行了%.2f秒'%(time.time-start_time))

结语

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

END

官方站点:www.linuxprobe.com

Linux命令大全:www.linuxcool.com

(新群,火热加群中……)

扫描二维码推送至手机访问。

版权声明:本文由我的模板布,如需转载请注明出处。


本文链接:http://60200875.com/post/32652.html

分享给朋友:

“python必背入门代码(python必背入门代码打印)” 的相关文章

手机上的软件不见了怎么找(手机上的软件不见了,又能用怎么找出来)

手机上的软件不见了怎么找(手机上的软件不见了,又能用怎么找出来)

今天给各位分享手机上的软件不见了怎么找的知识,其中也会对手机上的软件不见了,又能用怎么找出来进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、我的手机桌面上的软...

1.80火龙打金传奇攻略(180火龙版传奇打金服手游)

1.80火龙打金传奇攻略(180火龙版传奇打金服手游)

本篇文章给大家谈谈1.80火龙打金传奇攻略,以及180火龙版传奇打金服手游对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、1.80火龙打金传奇如何学技能 2、1.80火...

异次元发卡源码下载(二次元发卡网源码)

异次元发卡源码下载(二次元发卡网源码)

今天给各位分享异次元发卡源码下载的知识,其中也会对二次元发卡网源码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、易语言支付宝验证到款自动发卡源码 2、提...

黑暗卫队编辑器网站直接打开(黑喑卫队编辑器)

黑暗卫队编辑器网站直接打开(黑喑卫队编辑器)

本篇文章给大家谈谈黑暗卫队编辑器网站直接打开,以及黑喑卫队编辑器对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、黑暗卫队编辑器网址打不开 2、csol为什么我的角色一出...

做短视频需要的软件小海豚(做短视频需要的软件小海豚是什么)

做短视频需要的软件小海豚(做短视频需要的软件小海豚是什么)

本篇文章给大家谈谈做短视频需要的软件小海豚,以及做短视频需要的软件小海豚是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、小海豚是拿里干嘛用的 2、小海豚视频剪辑软...

湖南卫视在线直播观看可回放高清(湖南卫视在线直播观看可回放高清视频)

湖南卫视在线直播观看可回放高清(湖南卫视在线直播观看可回放高清视频)

本篇文章给大家谈谈湖南卫视在线直播观看可回放高清,以及湖南卫视在线直播观看可回放高清视频对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、哪里可以在线看湖南卫视直播的我是歌手...