前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python爬虫:利用函数封装爬取多个网页,并将爬取的信息保存在excel中(涉及编码和pandas库的使用)

python爬虫:利用函数封装爬取多个网页,并将爬取的信息保存在excel中(涉及编码和pandas库的使用)

作者头像
戈贝尔光和热
发布2018-12-27 15:16:13
3.3K0
发布2018-12-27 15:16:13
举报
文章被收录于专栏:HUBU生信

在之前的文章中,我们已经爬取了单网页的湖北大学贴吧的信息。 仔细想一想,单网页也才只有50条信息,如果你想找到女神在哪些时间段发了哪些帖子,这么点信息是远远不够的········(毕竟,女神并不会天天发帖,贴吧每天的发帖数量肯定远远不止50条),所以,为了老铁们的幸福生活/注:并不是为了我自己,因为我女神是我女朋友(不加这句话,怕是要跪搓衣板板)/现在有必要更深入的探讨一下怎么爬取多网页的信息。

老规矩,在进入正题之前,让我先激励激励你们(吹吹牛皮)。

我从昨天下午回到家一直弄python弄到现在,不要觉得我是无聊,我的分子生物学实验报告还没写,数据结构的二叉树的遍历还没有开始研究,英语单词也还没背(虽然我经常忘记背),线代作业也还没开始写,再扯远一点,我的马原老师说的”挟泰山以超北海“,”方生方死,方死方生“到底是什么哲学意义,我也还没有开始研究。然而,就是这样,我什么都没做,我还是不怕,因为我爱python,我喜欢python的从入门到精通!(说得像真的一样),不知道大家有没有感觉很热血呢? 没有的话,我们就进入正题!(是的,并没有打错字)

本文分为这几个部分来讲python函数,编码问题,pandas库的使用,爬取数据,保存数据到本地excel。

python中的函数问题

每种语言都有它的函数定义方式,比如C语言就是 关键字 函数名(形参),同样地,python也有它的函数定义方式 def 函数名(形参): 函数的作用如果大家看过书的话,应该都知道,它是用来封装一段可以重复使用的代码的,而这段代码之所以能够被重复使用,就是因为实参可以代替形参的位置,从而实现不同的功能。

比如我定义一个函数:

代码语言:javascript
复制
def  myfunction():
    print("我爱小徐子")
这样,一个函数就制作完成啦!   
    那么如果我们要调用python中的函数应该怎么做呢?其实也很简单,只需要这样做:
myfunction()

来看看实际效果:

python中的编码问题

python作为一门优雅的编程语言,个人认为,它最不优雅的地方就是编码,编码问题简直能让人吐血·······

首先第一点要知道,unicode编码是包括了所有的语言编码,统一使用的是两个字节,而utf-8编码方式,针对于英文字母是和ASCⅡ相同的使用一的字节,而汉字使用的是两个字节。 unicode编码在内存中使用(并不代表内存中总是使用unicode编码),utf-8在硬盘中使用。 windows系统自带使用的是gbk编码方式。 注意到encode()方法是将unicode编码转化成其他编码,而decode是将其他编码转化成unicode编码方式。

pandas库的使用

python 中自带有对数据表格处理的pandas库,用起来十分简单(所以说经常用python可能会成为一个调包侠,而实际算法一个都不会,这也是python方便的原因:什么库都有,什么都能做),首先,你需要安装pandas库,在命令行中输入:pip install pandas即可。 下面来简单地讲一讲一些pandas库的基本操作:

代码语言:javascript
复制
#声明
import pandas  as  pd
from  pandas   import  DataFrame  
要知道,pandas中有一个DataFrame模块,它类似与excel的表格形式。 在这里,我们需要知道将文件保存为excel格式使用的命令是:
代码语言:javascript
复制
df.to_excel(文件名)

其中df就是DataFrame类型。

pandas库还有很多操作,大家可以在网上自行学习。

进行数据的爬取

进行数据的爬取时,有一个问题真的是超级坑爹,就是关于.text.strip()这个方法的运用。

大家可以先看我的代码(和之前的文章爬取方式相同,不清楚的可以看专栏之前的文章):

代码语言:javascript
复制
In [14]: import  requests
    ...:
    ...: import  pandas  as  pd
    ...:zui
    ...: from  pandas  import  DataFrame
    ...:
    ...: import  numpy  as  np
    ...:
    ...: from  bs4  import  BeautifulSoup
    ...:
    ...: def  get_url(url):
    ...:
    ...:     r=requests.get(url)
    ...:     r.raise_for_status()
    ...:     r.encoding='utf-8'#这里我们已经知道了贴吧的编码方式,所以直接用utf-8
    ...:     r=r.text
    ...:     return  r
    ...: def  analyze_url(url,title_list,author_list,reply_list):
    ...:     soup=BeautifulSoup(url,'lxml')
    ...:     Tags=soup.find_all('li',attrs={"class":" j_thread_list clearfix"})
    ...:     for  li  in  Tags:
    ...:          title_list.append(li.find('div',attrs={"class":"threadlist_title pull_left j_th_tit "}))
    ...:          author_list.append(li.find('span',attrs={"class":"frs-author-name-wrap"}))
    ...:          reply_list.append(li.find('div',attrs={"class":"col2_left j_threadlist_li_left"}))
    ...: title_list=[]
    ...: author_list=[]
    ...: reply_list=[]
    ...: for i  in  range(0,11):
    ...:     url='http://tieba.baidu.com/f?kw=%E6%B9%96%E5%8C%97%E5%A4%A7%E5%AD%A6&ie=utf-8&pn='+str(50*i)
    ...:     html=get_url(url)
    ...:     analyze_url(html,title_list,author_list,reply_list)
    ...:     print('正在爬取第%d页'%i)

最后爬取的结果是这样的:

可是,我到现在都有一个问题,我想除去标签,可是使用.text.strip()就会报错:

有大佬能解决的可以和我交流一下。

保存数据到本地excel

代码为:

代码语言:javascript
复制
In [16]: df=DataFrame()
In [17]: df["标题"]=title_list
In [18]: df["发帖人"]=author_list
In [19]: df["回复数量"]=reply_list
In [20]: df.to_excel(r'C:\Users\13016\Desktop\3.xlsx')

最后的结果为:

总而言之,今天的文章昨天其实就可以写出来。希望本文给大家一些帮助,当然,有知道为什么用.text.strip()方法会报错的原因的朋友,记得和我交流,至少,我到现在还是没有发现为什么会出现这个问题。

全文结束,欢迎在评论区讨论~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/11/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档