Python3.5 爬虫之由浅入深(二、get多个网页)
Python3.5 爬虫之由浅入深(二、get多个网页)
望共同进步
转载请注明地址:http://blog.csdn.net/weixin_39701039/article/details/79535578
首先的安装requests模块,这里安装和前面讲到的安装xlrd模块类似,详见http://blog.csdn.net/weixin_39701039/article/details/79492672
安装好requests模块之后,就可以开始导入import requests 来开始些代码了
前面也已经写了如何抓取单个网页(详见http://mp.blog.csdn.net/postedit/79527224),这里是关于多个网页的抓取,
还是把网页的抓取思路在写一遍:
我们爬取网页的过程大致分四步:
第一步:获取需要爬取的url(多个网页的爬取主要在于这一步);
1.访问原网址,get网页内容,
2.利用标签(BeautifulSoup等),正则(re)等方法获取网页中的链接网址,然后经过处理得到我们要爬取得url列表
ps:(BeautifulSoup模块是在bs4里,所以要pip install bs4 或则手动下载安装包解压,详见http://mp.blog.csdn.net/postedit/79492672,re模块安装同理)
第二步:将url发送请求到服务器(requests.get(url,...);因为多个,所以这里可用for循环);
第三步:服务器将内容发送到客户端(也就是我们的电脑上response = requests.get());
第四步:保存内容到对应的文件位置(with....到结束部分)。
为了方便理解,可以看下http协议部分,这里我没有做总结,以后有机会再做
代码如下:
#coding:utf-8 #python3.5.1 import requests import time from bs4 import BeautifulSoup #这里以我的微博网址为例 url = 'http://blog.csdn.net/weixin_39701039' #定义请求头部 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' } #'User-Agent'为代理,方便爬虫 response = requests.get(url,headers = headers,timeout = 60) #url为传入网址参数;headers为请求头部;timeout为设置反应延迟时间,这里意味着延迟超过60s则放弃 response.encoding = 'utf-8' #编码 #获取文本text res= response.text #BeautifulSoup处理 soup = BeautifulSoup(res,'html.parser') #print(soup) #两种方法观察怎样获取链接 #一.观察打印出的soup,发现所需要的链接href在<li class="blog-unit">下的a标签里 #二.用开发者工具(这里我用google示例):1.鼠标停在网页上,邮件选择开发者工具,或则按F12(键盘顶行);2,点击开发者工具顶行菜单Element,选择箭头,然后把鼠标移到网页上,开始查找(见图1,图2). lis = soup('li',class_="blog-unit") #已经获取所有需要的<li>标签,这里lis类型为列表(list) #循环列表 a = 0 for li in lis: #使得每次循环a值不一样 a = a + 1 #获取a标签 a_get = li('a',target="_blank")[0] #获取链接href href = a_get['href'] print(href) #这里href即为完整的url response1 = requests.get(href, headers=headers, timeout=60) # url为传入网址参数;headers为请求头部;timeout为设置反应延迟时间,这里意味着延迟超过60s则放弃 response1.encoding = 'utf-8' # 编码 #这里就先不讲title的获取,可以用str(数字)代替,保证每次循环的名称不一样就行 title = str(a) with open(r'G:\任务20180312/url_several' + '/' + title +'.html','wb') as f: #wb: w表示写入,b表示二进制, wb表示以二进制文件写入 #response.content 为获取的二进制文件 f.write(response1.content) #如图3,图4
图1:
图2:
图3:
图4:
单个网页的抓取请转 http://blog.csdn.net/weixin_39701039/article/details/79527224
望有所帮助,望采纳!!