python爬虫实验报告怎么写_[Python]新手写爬虫全过程(转)

这篇博客记录了一位新手使用Python编写爬虫的全过程,包括获取网页内容、提取标题和图片URL、存储到本地TXT文件。博主详细介绍了如何仅使用字符串内建函数实现爬虫,以及在过程中遇到的问题和解决方案,如处理多图、URL管理等。最后,博主分享了爬虫代码,并表示计划学习正则表达式和XPath以优化爬虫。
摘要由CSDN通过智能技术生成

今天早上起来,第一件事情就是理一理今天该做的事情,瞬间get到任务,写一个只用python字符串内建函数的爬虫,定义为v1.0,开发中的版本号定义为v0.x。数据存放?这个是一个练手的玩具,就写在txt文本里吧。其实主要的不是学习爬虫,而是依照这个需求锻炼下自己的编程能力,最重要的是要有一个清晰的思路(我在以这个目标努力着)。ok,主旨已经订好了,开始‘撸串’了。

目标网站:http://bohaishibei.com/post/category/main/(一个很有趣的网站,一段话配一个图,老有意思了~)网站形式如下:

目标:把大的目标分为几个小的目标。因为第一次干这个,所以对自己能力很清楚,所以完成顺序由简单到复杂。

1.爬取一期的内容,包括标题,和图片的url

2.把数据存在本地的txt文件中

3.想爬多少就爬就爬少

4.写一个网站,展示一下。(纯用于学习)

Let‘s 搞定它!

时间——9:14

把昨天晚上做的事情交代一下。昨天晚上写的代码实现了爬取一期里的所有标题。

第一步:

我用的是google浏览器,进入开发者模式,使用’页面内的元素选择器‘,先看一下内页中的结构,找到我们要的数据所在’标签‘。

这里我们需要的博海拾贝一期的内容全部在这个标签里面,如下图:

第一条红线是:页面内的元素选择器

第二条是:内容所在标签

第三条是:title

经过分析得出,我只要,这个标签的内容:所以写了下面的方法:

defcontent(html):

#内容分割的标签

str = ''content = html.partition(str)[2]

str1 = '

'content =content.partition(str1)[0]

return content #得到网页的内容

这里需要说一下:在写这个爬虫之前我就打算只用字符串的内置函数来处理匹配问题,所以我就上http://www.w3cschool.cc/python/进入到字符串页面,大致看了一遍字符串的内建函数有哪些。

partition() 方法用来根据指定的分隔符将字符串进行分割。

如果字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。

partition() 方法是在2.5版中新增的。参考:http://www.w3cschool.cc/python/att-string-partition.html

这样我就得到只有内容的字符串了,干净~

第二步:

得到title的内容。title的格式如下,我只要’【2】‘后面的文字,后面的img暂时不考虑一步步的来。

我写了下面的方法:

def title(content,beg =0):

#思路是利用str.index()和序列的切片

try:

title_list =[]

whileTrue:

num1 = content.index('】',beg)

num2 = content.index('

',num1)

title_list.append(content[num1:num2])

beg =num2

exceptValueError:

return title_list

这里用try....except是因为我不知道怎么跳出循环。。。。求大神有更好的方法告诉我。

我这里跳出循环用的是当抛出VlaueError异常就说明找不到了,那就返回列表。就跳出循环了。

num1是】的位置,num2是

的位置,然后用序列的切片,咔嚓咔嚓一下就是我想要的数据了。这里需要注意的是:切片’要头不要尾‘所以我们的得到的数据就是这个样子的:

哎呀,这个是什么鬼!要头不要尾就是这个意思!

然后我就想:那就把num1加1不就完了吗?我真是太天真了。。。。

请+3,我觉得原理是这样的,这个是个中文字符!(求大神指点)

第三步:

交代清楚我昨天晚上做的事情了,记录下时间——10:01,下面我要爬图片的url了。这里要说一下,如果要把图片下下来,最重要的一步就是得到url,然后下载下来保存到本地(用文本的IO)。

我先获得url,实现原理同获取title,我在想,既然一样卸载获取title的方法里好,还是在写一个方法好。我单独写了一个方法,但是其实就是复制了一下title的方法,改了下匹配的字符串,代码如下:

def img(content,beg =0):

#思路是利用str.index()和序列的切片

try:

img_list =[]

whileTrue:

src1 = content.index('http',beg)

src2 = content.index('/>

',src1)

img_list.append(content[src1:src2])

beg =src2

exceptValueError:

return img_list

结果图如下:

这里发现,有的时候一个title会有很多个图片。我思考之后有如下思路:

1.需要写一个方法,当一个title出现多个图片的时候,捕获url。这个需要有一个判断语句,当url长度大于一个url长度的时候,才需要调用这个函数。

2.多个图片的url怎么放?使用符号隔开存放还是嵌套放入一个数组里面?我这里打算用’|‘隔开,这样的话加一个判语句,或者先判断一下url长度,都可以进行。

这个问题先放在这里,因为当我要下载的时候这个url才需要过滤,所以先进行下一步,把数据存到本地txt文中,这里在解决这个问题也不晚。

第四步:

把数据存到本地的txt中。Python文件IO参考资料:http://www.w3cschool.cc/python/python-files-io.html

这里需要注意的是,文本写入的时候记得close,还有就是注意打开文本的模式。

时间——11:05 吃个饭先

时间——11:44 回来了

这里我考虑了一个问题,根据《编写高质量代码——改善python程序的91个建议》这本书中写道的,字符串连接时,用jion()效率高于’+‘

所以我写了如下代码:

defdata_out(data):

#这里写成一个方法好处是,在写入文本的时候就在这里写

fo = open("/home/qq/data.txt", "a+") #这里注意重新写一个地址#for i,e in enumerate(data):

fo.write("\n".join(data));

#print '第%d个,title:%s' % (i,e)

#关闭打开的文件

fo.close()

这样造成了一个问题,看图

造成最后一个和新的一个列表写入时在同一行。同时用with....as更好。修改后代码如下:

defdata_out(data):

#写入文本

with open("/home/qq/foo.txt", "a+") as fo:

fo.write('\n')

fo.write("\n".join(data));

下面研究title和img以什么样的格式存入txt文本:

title$img

这里我有一个概念混淆了,+和join()方法的效率问题主要在连接多个字符串的时候,我这个只用连接一次,不需要考虑这个问题。

defdata_out(title, img):

#写入文本

with open("/home/qq/foo.txt", "a+") as fo:

fo.write('\n')

size =0

for size inrange(0, len(title)):

fo.write(title[size]+'$'+img[size]+'\n');

文本中的内容如下:

愿你贪吃不胖,愿你懒惰不丑,愿你深情不被辜负。$http://ww1.sinaimg.cn/mw690/005CfBldtw1etay8dl1bsj30c50cbq4m.jpg"

这是我最近的状态,请告诉我不是我一个人!$http://ww4.sinaimg.cn/mw690/005CfBldtw1etay8ifthnj30an0aot8w.jpg

引诱别人和你击拳庆祝,然后偷偷把手势变成二,就可以合体成为蜗牛cosplay……$http://ww2.sinaimg.cn/mw690/005CfBldtw1etay8fzm1sg30b40644qq.gif

原来蜗牛是酱紫吃东西的。。。。涨姿势!$http://ww4.sinaimg.cn/mw690/005CfBldtw1etay8egg8vg30bo08ax6p.gif

写入文本的最后,解决多个图片的问题:

def many_img(data,beg =0):

#用于匹配多图中的url

try:

many_img_str = ''

whileTrue:

src1 = data.index('http',beg)

src2 = data.index('/>

beg =src2

exceptValueError:

returnmany_img_str

defdata_out(title, img):

#写入文本

with open("/home/qq/data.txt", "a+") as fo:

fo.write('\n')

for size inrange(0, len(title)):

#判断img[size]中存在的是不是一个url

if len(img[size]) > 70:

img[size] = many_img(img[size])#调用many_img()方法

fo.write(title[size]+'$'+img[size]+'\n')

输出如下:

元气少女陈意涵 by @TopFashionStyle$http://ww2.sinaimg.cn/mw690/005CfBldtw1etay848iktj30bz0bcq4x.jpg|http://ww1.sinaimg.cn/mw690/005CfBldtw1etay83kv5pj30c10bkjsr.jpg|http://ww3.sinaimg.cn/mw690/005CfBldtw1etay82qdvsj30c10bkq3z.jpg|http://ww1.sinaimg.cn/mw690/005CfBldtw1etay836z8lj30c00biq40.jpg|http://ww4.sinaimg.cn/mw690/005CfBldtw1etay8279qmj30ac0a0q3p.jpg|http://ww1.sinaimg.cn/mw690/005CfBldtw1etay81ug5kj30c50bnta6.jpg|http://ww2.sinaimg.cn/mw690/005CfBldtw1etay8161ncj30c20bgmyt.jpg|http://ww2.sinaimg.cn/mw690/005CfBldtw1etay804oy7j30bs0bgt9r.jpg|

暂时功能是实现了,后面遇到问题需要修改在改吧。。。。新手走一步看一步!!!

到此为止,已经完成了前两个简单的计划:

1.爬取一期的内容,包括标题,和图片的url

2.把数据存在本地的txt文件中

全部代码如下:

#coding:utf-8

importurllib

#######爬虫v0.1 利用urlib 和 字符串内建函数######

defgetHtml(url):

#获取网页内容

page =urllib.urlopen(url)

html =page.read()

returnhtml

defcontent(html):

#内容分割的标签

str = ''content = html.partition(str)[2]

str1 = '

'content =content.partition(str1)[0]

return content #得到网页的内容

def title(content,beg =0):

#匹配title

#思路是利用str.index()和序列的切片

try:

title_list =[]

whileTrue:

num1 = content.index('】',beg)+3num2 = content

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python爬虫是指使用Python编程语言编的,用于自动化地从互联网上获取数据的一种程序。而CentOS是一种基于Linux操作系统的开源操作系统,它具有安全稳定、功能强大的特点,因此是Python爬虫程序开发的一个很好的工具选择。以下是Python爬虫基础教程一中介绍的CentOS环境安装的步骤: 1. 下载CentOS虚拟机镜像文件,建议选择CentOS 7版本。 2. 安装虚拟机软件,如VMware或VirtualBox。 3. 在虚拟机软件中创建的虚拟机,选择CentOS虚拟机镜像文件作为虚拟机映像文件。 4. 启动虚拟机并登录CentOS系统,使用终端输入命令进行环境配置和安装,如安装Python、pip、BeautifulSoup等工具。 通过以上步骤,我们可以在CentOS操作系统下成功配置Python爬虫所需要的开发环境,实现Python爬虫程序的正常运行。在后续的学习中,还可以学习到更加高级的Python爬虫技术,例如Scrapy、Selenium等,进一步提高爬虫程序的功能和效率。 ### 回答2: 在python爬虫基础教程1中,介绍了爬虫的基础知识和技巧。为了使爬虫运行的更加稳定和有效,我们需要在合适的环境下搭建爬虫。因此,在这里,我们将会学习如何在CentOS系统下安装python环境。 步骤1:安装Python 在CentOS系统下安装Python很简单。首先,我们需要打开终端,输入以下命令安装Python: ``` sudo yum install python3 ``` 这会下载并安装Python3到你的系统中。在安装过程中,你需要输入一个管理员密码,以便在安装过程中进行确认。 步骤2:安装pip 在安装完Python后,我们需要安装一个名为pip的软件来管理Python模块。我们可以使用以下命令: ``` sudo yum install python3-pip ``` 这会下载并安装pip到你的系统中。在完成安装后,你应该能看到一条类似于“Successfully installed pip-20.3.4”的信息。 步骤3:安装其他必要软件包 在安装完Python和pip后,我们可以使用pip安装所需的软件包。但是,在进行这一步之前,我们需要安装其他一些必要的软件包。我们可以使用以下命令来安装它们: ``` sudo yum -y install python3-devel libxslt-devel libxml2-devel ``` 此命令将下载和安装必要的软件包。一旦所有软件包都已安装成功,我们就可以开始安装其他必要模块。 步骤4:安装必要的Python模块 在安装完所需的软件包后,我们可以使用pip安装我们所需的模块。如果你想要使用爬虫,你需要安装以下模块: - beautifulsoup4:一个用于解析HTML和XML文档的库 - requests:一个HTTP请求库 我们可以使用以下命令安装这些模块: ``` sudo pip3 install beautifulsoup4 requests ``` 一旦安装完成,我们就能够使用Python构建我们的爬虫了。 总体而言,在CentOS系统上安装Python和必要的软件包非常简单。只需跟着上面的指南一步一步进行,你就能够安装好所有必要的工具,并开始使用Python爬虫构建你的爬虫程序。如果你需要安装其他的模块或软件包,你可以使用pip安装。祝你好运! ### 回答3: Python爬虫已经成为了网络抓取的一大利器,它可以轻松地获取互联网上的信息,包括图片、文字、音频、视频等等。而Centos作为一款稳定可靠的操作系统,也为Python爬虫提供了很好的支持。那么如何在Centos环境下安装Python爬虫呢? 在本教程中,我们会通过以下步骤来安装Python爬虫环境: 1. 安装Python 3.6版本 Centos系统自带的Python版本可能比较低,需要先安装Python 3.6版本。可以通过以下命令来安装: ```bash yum install epel-release yum install python36 python36-devel ``` 2. 安装pip pip是Python的包管理工具,可以轻松地安装和管理Python第三方库。可以通过以下命令来安装pip: ```bash yum install python36-pip ``` 3. 安装必要的库 Python爬虫需要使用的库有很多,需要根据需要来进行安装。在本教程中,我们需要安装requests和beautifulsoup4两个库,可以通过以下命令来安装: ```bash pip3 install requests pip3 install beautifulsoup4 ``` 4. 安装PyCharm(可选) PyCharm是一款强大的Python IDE,可以提高开发效率。可以在Centos系统上安装PyCharm来进行Python爬虫的开发。可以通过以下命令来安装: ```bash wget https://download.jetbrains.com/python/pycharm-professional-2019.2.4.tar.gz tar -xzvf pycharm-professional-2019.2.4.tar.gz cd pycharm-professional-2019.2.4/bin ./pycharm.sh ``` 5. 测试Python爬虫环境 在安装完成Python爬虫环境后,可以通过编Python脚本来测试环境是否正常工作。例如,可以编一个简单的爬虫脚本来获取网页内容: ```python import requests url = 'https://www.baidu.com' response = requests.get(url) print(response.text) ``` 通过运行脚本,可以看到该网页的内容被输出在控制台上,说明Python爬虫环境已经安装成功。 通过以上步骤的操作,我们可以轻松地在Centos系统上搭建Python爬虫环境。通过Python爬虫,我们可以轻松地获取互联网上的信息,并进行分析和处理,为我们的工作和学习提供了很大的便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值