0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何快速入门Python爬虫的?

电子工程师 来源:lq 2019-02-18 09:38 次阅读

不少读者是刚刚入门Python或者想学习Python的,今天就来谈谈如何用快速入门爬虫。

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

以我纯小白、零基础的背景来说,入门爬虫其实很容易,容易在代码编写很简单,简单的爬虫通常几行就能搞定,而不容易在确定爬虫的目标,也就是说为什么要去写爬虫,有没有必要用到爬虫,是不是手动操作几乎无法完成,互联网上有数以百万千万计的网站,到底以哪一个网站作为入门首选,这些问题才是难点。所以在动手写爬虫前,最好花一些时间想一想这清楚这些问题。

「Talk is cheap. Show me the code」,下面我就以曾写过的一个爬虫为例,说一说我是如何快速入门Python爬虫的。

▌确立目标

第一步,确立目标。

为什么想起写这个爬虫呢,是因为这是曾经在工作中想要解决的问题,当时不会爬虫,只能用Excel花了数个小时才勉强地把数据爬了下来, 所以在接触到爬虫后,第一个想法就是去实现曾未实现的目标。以这样的方式入门爬虫,好处显而易见,就是有了很明确的动力。

很多人学爬虫都是去爬网上教程中的那些网站,网站一样就算了,爬取的方法也一模一样,等于抄一遍,不是说这样无益,但是会容易导致动力不足,因为你没有带着目标去爬,只是为了学爬虫而爬,爬虫虽然是门技术活,但是如果能建立在兴趣爱好或者工作任务的前提下,学习的动力就会强很多。

在确定好爬虫目标后,接着我就在脑中预想了想要得到什么样的结果、如何展示出来、以什么形式展现这些问题。所以,我在爬取网站之前,就预先构想出了想要的一个结果,大致是下面这张图的样子。

目标是利用爬下来的数据,尝试从不同维度年份、省份、城市去分析全国的股市信息,然后通过可视化图表呈现出来。

抛开数据,可能你会觉得这张图在排版布局、色彩搭配、字体文字等方面还挺好看的。这些呢,就跟爬虫没什么关系了,而跟审美有关,提升审美的一种方式是可以通过做PPT来实现,所以你看,咱们说着说着就从爬虫跳到了 PPT,不得不说我此前发的文章铺垫地很好啊,哈哈。其实,在职场中,你拥有的技能越多越好。

▌直接开始

确定了目标后,第二步就可以开始写爬虫了,如果你像我一样,之前没有任何编程基础,那我下面说的思路,可能会有用。

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

所以,我在写第一遍的时候,只用了5行代码,就成功抓取了全部所需的信息,当时的感觉就是很爽,觉得爬虫不过如此啊,自信心爆棚。

1importpandasaspd2importcsv3foriinrange(1,178):#爬取全部页4tb=pd.read_html('http://s.askci.com/stock/a/?reportTime=2017-12-31&pageNum=%s'%(str(i)))[3]5tb.to_csv(r'1.csv',mode='a',encoding='utf_8_sig',hea

3000+ 上市公司的信息,安安静静地躺在 Excel 中:

▌不断完善

有了上面的信心后,我开始继续完善代码,因为5行代码太单薄,功能也太简单,大致从以下几个方面进行了完善:

增加异常处理

由于爬取上百页的网页,中途很可能由于各种问题导致爬取失败,所以增加了 try except 、if 等语句,来处理可能出现的异常,让代码更健壮。

增加代码灵活性

初版代码由于固定了URL参数,所以只能爬取固定的内容,但是人的想法是多变的,一会儿想爬这个一会儿可能又需要那个,所以可以通过修改 URL 请求参数,来增加代码灵活性,从而爬取更灵活的数据。

修改存储方式

初版代码我选择了存储到Excel这种最为熟悉简单的方式,人是一种惰性动物,很难离开自己的舒适区。但是为了学习新知识,所以我选择将数据存储到 MySQL 中,以便练习 MySQL 的使用。

加快爬取速度

初版代码使用了最简单的单进程爬取方式,爬取速度比较慢,考虑到网页数量比较大,所以修改为了多进程的爬取方式。

经过以上这几点的完善,代码量从原先的5行增加到了下面的几十行:

1importrequests2importpandasaspd3frombs4importBeautifulSoup4fromlxmlimportetree5importtime6importpymysql7fromsqlalchemyimportcreate_engine8fromurllib.parseimporturlencode#编码URL字符串910start_time=time.time()#计算程序运行时间11defget_one_page(i):12try:13headers={14'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/66.0.3359.181Safari/537.36'15}16paras={17'reportTime':'2017-12-31',18#可以改报告日期,比如2018-6-30获得的就是该季度的信息19'pageNum':i#页码20}21url='http://s.askci.com/stock/a/?'+urlencode(paras)22response=requests.get(url,headers=headers)23ifresponse.status_code==200:24returnresponse.text25returnNone26exceptRequestException:27print('爬取失败')2829defparse_one_page(html):30soup=BeautifulSoup(html,'lxml')31content=soup.select('#myTable04')[0]#[0]将返回的list改为bs4类型32tbl=pd.read_html(content.prettify(),header=0)[0]33#prettify()优化代码,[0]从pd.read_html返回的list中提取出DataFrame34tbl.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)35returntbl3637defgenerate_mysql():38conn=pymysql.connect(39host='localhost',40user='root',41password='******',42port=3306,43charset='utf8',44db='wade')45cursor=conn.cursor()4647sql='CREATETABLEIFNOTEXISTSlisted_company(serial_numberINT(20)NOTNULL,stock_codeINT(20),stock_abbreVARCHAR(20),company_nameVARCHAR(20),provinceVARCHAR(20),cityVARCHAR(20),main_bussiness_incomeVARCHAR(20),net_profitVARCHAR(20),employeesINT(20),listing_dateDATETIME(0),zhaogushuVARCHAR(20),financial_reportVARCHAR(20),industry_classificationVARCHAR(20),industry_typeVARCHAR(100),main_businessVARCHAR(200),PRIMARYKEY(serial_number))'48cursor.execute(sql)49conn.close()5051defwrite_to_sql(tbl,db='wade'):52engine=create_engine('mysql+pymysql://root:******@localhost:3306/{0}?charset=utf8'.format(db))53try:54tbl.to_sql('listed_company2',con=engine,if_exists='append',index=False)55#append表示在原有表基础上增加,但该表要有表头56exceptExceptionase:57print(e)5859defmain(page):60generate_mysql()61foriinrange(1,page):62html=get_one_page(i)63tbl=parse_one_page(html)64write_to_sql(tbl)6566##单进程67if__name__=='__main__':68main(178)69endtime=time.time()-start_time70print('程序运行了%.2f秒'%endtime)7172#多进程73frommultiprocessingimportPool74if__name__=='__main__':75pool=Pool(4)76pool.map(main,[iforiinrange(1,178)])#共有178页77endtime=time.time()-start_time78print('程序运行了%.2f秒'%(time.time()-start_time))

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4553

    浏览量

    66665
  • python
    +关注

    关注

    51

    文章

    4667

    浏览量

    83443
  • 爬虫
    +关注

    关注

    0

    文章

    77

    浏览量

    6492

原文标题:5行代码就能入门爬虫?

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Python数据爬虫学习内容

    ,利用爬虫,我们可以解决部分数据问题,那么,如何学习Python数据爬虫能?1.学习Python基础知识并实现基本的爬虫过程一般获取数据的过
    发表于 05-09 17:25

    Python爬虫与Web开发库盘点

    Python爬虫和Web开发均是与网页相关的知识技能,无论是自己搭建的网站还是爬虫爬去别人的网站,都离不开相应的Python库,以下是常用的Pyth
    发表于 05-10 15:21

    Python快速入门方法

    本帖最后由 一只耳朵怪 于 2018-5-24 17:34 编辑 零基础情况下,想学一门语言。其实python非常适合初学者入门。相比较其他不少主流编程语言,有更好的可读性,因此上手相对容易
    发表于 05-24 15:37

    0基础入门Python爬虫实战课

    学习资料良莠不齐爬虫是一门实践性的技能,没有实战的课程都是骗人的!所以这节Python爬虫实战课,将帮到你!课程从0基础入门开始,受众人群广泛:如毕业大学生、转行人群、对
    发表于 07-25 09:28

    Python爬虫简介与软件配置

    Python爬虫练习一、爬虫简介1. 介绍2. 软件配置二、爬取南阳理工OJ题目三、爬取学校信息通知四、总结五、参考一、爬虫简介1. 介绍网络爬虫
    发表于 01-11 06:32

    如何快速入门python nodemcu_NodeMCU?

    如何快速入门python nodemcu_NodeMCU?
    发表于 02-15 06:31

    python网络爬虫概述

    的数据,从而识别出某用户是否为水军学习爬虫前的技术准备(1). Python基础语言: 基础语法、运算符、数据类型、流程控制、函数、对象 模块、文件操作、多线程、网络编程 … 等(2). W3C标准
    发表于 03-21 16:51

    详细用Python写网络爬虫

    详细用Python写网络爬虫
    发表于 09-07 08:40 32次下载
    详细用<b class='flag-5'>Python</b>写网络<b class='flag-5'>爬虫</b>

    完全自学指南Python爬虫BeautifulSoup详解

    完全自学指南Python爬虫BeautifulSoup详解
    发表于 09-07 08:55 36次下载
    完全自学指南<b class='flag-5'>Python</b><b class='flag-5'>爬虫</b>BeautifulSoup详解

    WebSpider——多个python爬虫项目下载

    此文档包含多个python爬虫项目
    发表于 03-26 09:29 3次下载

    Python爬虫8个常用的爬虫技巧分析总结

    python也差不多一年多了,python应用最多的场景还是web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码识别脚本。
    的头像 发表于 08-18 11:45 4866次阅读

    python爬虫入门教程之python爬虫视频教程分布式爬虫打造搜索引擎

    本文档的主要内容详细介绍的是python爬虫入门教程之python爬虫视频教程分布式爬虫打造搜索
    发表于 08-28 15:32 29次下载

    python爬虫框架有哪些

    本视频主要详细介绍了python爬虫框架有哪些,分别是Django、CherryPy、Web2py、TurboGears、Pylons、Grab、BeautifulSoup、Cola。
    的头像 发表于 03-22 16:13 6440次阅读

    Python写网络爬虫

    Python写网络爬虫的方法说明。
    发表于 06-01 11:55 21次下载

    利用Python编写简单网络爬虫实例

    利用 Python编写简单网络爬虫实例2 实验环境python版本:3.3.5(2.7下报错
    发表于 02-24 11:05 13次下载