python3使用requests包抓取并保存网页源码

来源:互联网 发布:smartgit linux 安装 编辑:程序博客网 时间:2024/06/15 11:57

转载自:http://blog.csdn.net/w93223010/article/details/18968081

近期的工作学习中使用到了Python,分享一些初学者的心得与君共勉。

本节的内容主要是如何使用python去获取网页的源代码并存储到本地文件中,希望通过本节可以让你略微了解到python的神奇。

先上代码:

import urllib.request  def getPage(url):         request = urllib.request.Request(url)      response = urllib.request.urlopen(request)      return response.read().decode("utf-8")       url='http://www.kntpb.com/'  result=getPage(url)  print (result) 

1行导入了必要的包

第2至6\5行定义了一个函数,目的是向指定url发送http请求,并将网页的源代码返回

最后把获得的源码进行展示

在命令行执行代码的话,可以看到类似图1-1的一堆html代码,即为成功。


1-1

可以用浏览器访问一下代码中的url,可以看到类似图1-2ebay的网站。(为了逃避中文字符的处理,所以选择了英文的网站)

1-2

而在浏览的网页的空白处单击右键,选择“查看网页源代码”,可以看到类似图1-3的的html源码,实际上与图1-1中是一样的。


1-3


修改一下代码,将获取的html源码写入本地的文件。

[python] view plain copy
  1. import urllib  
  2. import urllib2  
  3. def getPage(url):     
  4.     request = urllib2.Request(url)  
  5.     response = urllib2.urlopen(request)  
  6.     return response.read()  
  7.       
  8. url='http://www.ebay.com/sch/TShirts-/15687/i.html?Style=Basic%2520Tee&_dcat=15687&Color=Black&_pgn=1'  
  9. result=getPage(url)  
  10. txt='D:\\result.html'  
  11. f = open(txt,"w+")  
  12. f.write(result)  


1012行进行了文件操作,在D盘创建了result.html文件并将result变量中的内容写入其中。


作为一个购物网站,大部分类型的商品都是分很多页的,接下来继续修改代码,让它能够取出前5页的内容,分别写入5个文件中。

[python] view plain copy
  1. import urllib  
  2. import urllib2  
  3. def getPage(url):     
  4.     request = urllib2.Request(url)  
  5.     response = urllib2.urlopen(request)  
  6.     return response.read()  
  7.       
  8. url='http://www.ebay.com/sch/TShirts-/15687/i.html?Style=Basic%2520Tee&_dcat=15687&Color=Black'  
  9. p=0  
  10. while p<5:  
  11.     print ' =='+str(p+1)+'==start=='  
  12.     result=getPage(url+'&_pgn='+str(p+1))  
  13.     txt='D:\\result'+str(p+1)+'.html'  
  14.     f = open(txt,"w+")  
  15.     f.write(result)  
  16.     print ' =='+str(p+1)+'====end=='  
  17.     p=p+1  
  18. f.close()  

8行修改了url字符串的结尾部分,删除了“&_pgn=1”,并将其作为后面循环的参数

1017行做了一个04的循环(当然你也可以设置成15),其中第11行和16行仅是跟踪代码,用以显示当前读到的页数。第12行的实参将循环变量p组合进去,达到获取不同页html源码的作用。

18行结束文件操作,关闭所用资源。

 

程序在命令行执行后,最后一行显示“==5====end==”,并在D盘生成如图1-4的,文件大小近似的5html文件即为成功。

1-4

==========================================以下是之前的笔记=====================================

这篇文章主要介绍了Python3使用requests包抓取并保存网页源码的方法,实例分析了Python3环境下requests模块的相关使用技巧,需要的朋友可以参考下

本文实例讲述了Python3使用requests包抓取并保存网页源码的方法。分享给大家供大家参考,具体如下:

使用Python 3的requests模块抓取网页源码并保存到文件示例:

import requestshtml = requests.get("http://www.baidu.com")with open('test.txt','w',encoding='utf-8') as f: f.write(html.text)

这是一个基本的文件保存操作,但这里有几个值得注意的问题:

1.安装requests包,命令行输入pip install requests即可自动安装。很多人推荐使用requests,自带的urllib.request也可以抓取网页源码

2.open方法encoding参数设为utf-8,否则保存的文件会出现乱码。

3.如果直接在cmd中输出抓取的内容,会提示各种编码错误,所以保存到文件查看。

4.with open方法是更好的写法,可以自动操作完毕后释放资源。

另一个例子:

import requestsff = open('testt.txt','w',encoding='utf-8')with open('test.txt',encoding="utf-8") as f: for line in f: ff.write(line)ff.close()

这是演示读取一个txt文件,每次读取一行,并保存到另一个txt文件中的示例。

因为在命令行中打印每次读取一行的数据,中文会出现编码错误,所以每次读取一行并保存到另一个文件,这样来测试读取是否正常。(注意open的时候制定encoding编码方式)

转自:小谈博客 http://www.tantengvip.com/2015/05/requests-html/

原创粉丝点击