Python简单爬虫第二蛋!

Posted 星辰戟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python简单爬虫第二蛋!相关的知识,希望对你有一定的参考价值。

第二讲:几个爬取网页的实例

  本讲通过几个实例来讲述一下爬取网页的基本操作,同时也复习一下上节课的内容,相信还记得通用的代码框架吧,本讲还需要用到它,哈哈哈,是不能忘记滴。

  好了,开始!

  第一个实例:

 

 1 \'\'\'小说爬取\'\'\'
 2 
 3 import requests
 4 
 5  
 6 
 7 def getHTML_Text(url):
 8 
 9     try:
10 
11         r = requests.get(url,timeout = 20)
12 
13         r.raise_for_status() #如果状态不是200,则产生异常
14 
15         r.encoding = r.apparent_encoding
16 
17         return r.text
18 
19     except:
20 
21         return \'产生异常\'
22 
23  
24 
25 if __name__ == \'__main__\':
26 
27 url = \'http://wanmeishijiexiaoshuo.org/book/9.html\'
28 
29 #上面是某小说网站的其中一章小说内容
30 
31 print(getHTML_Text(url)[:5000])

 

 

 

 

  让我们来运行一下看看结果:

 

 

 

  看吧,都是小说的内容,爬下来了吧,懂了操作了吧,简单来说就是输入小说网站的url,然后爬取的框架就能自动爬取下来了。

 

  下面看第二个实例:

 

 1 \'\'\'亚马逊商场爬取\'\'
 2 
 3 import requests
 4 
 5  
 6 
 7 def getHTML_Text(url):
 8 
 9     try:
10 
11         kv = {\'user-agent\':\'Mozilla/5.0\'} #headers头信息
12 
13         r = requests.get(url,timeout = 20,headers = kv)
14 
15         r.raise_for_status() #如果状态不是200,则产生异常
16 
17         r.encoding = r.apparent_encoding
18 
19         return r.text
20 
21     except:
22 
23         return \'产生异常\'
24 
25  
26 
27 if __name__ == \'__main__\':
28 
29     url = \'https://www.amazon.cn/\'
30 
31 print(getHTML_Text(url)[:5000])

 

 

 

  看看运行结果:

 

  挺乱七八糟的,但是这不是重点,重点是我们获取了全部response的信息,到后面我们会涉及到提取有用的信息,现在先不要着急哈,慢慢来,饭要一口一口吃。

  kv = {\'user-agent\':\'Mozilla/5.0\'} #headers头信息

  r = requests.get(url,timeout = 20,headers = kv)

  还记得前面提到的get()方法里面的还有几个未提及的参数吗,这里的headers就是其中一个,添加了头信息之后,爬虫会伪装成Mozilla浏览器对目标url发送请求,如果对方服务器是能识别爬虫的,不伪装一下肯能分分钟被拒绝访问,这里我们添加了kv 字典作为头信息,在一定程度上提升了爬虫的能力,哈哈哈,下面看下一个例子。

 

  实例三:

 1 \'\'\'百度搜索\'\'\'
 2 
 3 import requests
 4 
 5  
 6 
 7 def getHTML_Text(url):
 8 
 9     try:
10 
11         kv = {\'user-agent\':\'Mozilla/5.0\'}
12 
13         wd = {\'wd\':\'北京天气\'}
14 
15         r = requests.get(url,timeout = 20,params = wd ,headers = kv)
16 
17         r.raise_for_status() #如果状态不是200,则产生异常
18 
19         r.encoding = r.apparent_encoding
20 
21         return r.text
22 
23     except:
24 
25         return \'产生异常\'
26 
27  
28 
29 if __name__ == \'__main__\':
30 
31     url = "http://www.baidu.com/s?"
32 
33     print(getHTML_Text(url)[:5000])

 

 

  看看运行结果:

 

  我#@¥!@%!@#

  冷静一下,再改改:

 1 \'\'\'百度搜索\'\'\'
 2 
 3 import requests
 4 
 5  
 6 
 7 def getHTML_Text(url):
 8 
 9     try:
10 
11         wd = {\'wd\':\'北京天气\'}
12 
13         r = requests.get(url,timeout = 20,params = wd)
14 
15         r.raise_for_status() #如果状态不是200,则产生异常
16 
17         r.encoding = r.apparent_encoding
18 
19         return r.text
20 
21     except:
22 
23         return \'产生异常\'
24 
25  
26 
27 if __name__ == \'__main__\':
28 
29     url = "http://www.baidu.com/s?"
30 
31     print(getHTML_Text(url)[:5000])

 

 

  运行结果:

 

  已经有结果了,原因是那个headers 的参数我们模拟的是Mozilla浏览器,百度的服务器直接拒绝访问了,没事,问题不大,我们注重的是过程,不用这些细节。

  好了,经过上面3个实例,相信对requests.get()方法的使用有更深的理解了吧,最后总结一下get()方法的参数。

参数名

说明

data

字典、字节序列或文件对象,作为Request的内容

json

JSON格式的数据,作为Request的内容

headers

字典,HTTP定制头

cookies

字典或CookieJar,Request中的cookie

auth

元组,支持HTTP认证功能

timeout

设定超时时间,秒为单位

files

字典类型,传输文件

proxies

字典类型,设定访问代理服务器,可以增加登陆认证

allow_redirects

True/False,默认位True,重定向开关

stream

True/False,默认位True,获取内容立即下载开关

verify

True/False,默认位True,认证SSL证书开关

cert

本地SSL证书路径

  这些参数会随着以后的学习逐步深入,本期到此结束。

以上是关于Python简单爬虫第二蛋!的主要内容,如果未能解决你的问题,请参考以下文章

scrapy主动退出爬虫的代码片段(python3)

python爬虫简单问题,HTML对象的定位问题?

[Python]python爬虫简单试用

爬虫遇到头疼的验证码?Python实战讲解弹窗处理和验证码识别

Python:黑板课爬虫闯关第二关

python爬虫_第二课