您的位置:首页 > 编程语言 > Python开发

Python3.5 爬虫之由浅入深(二、get多个网页)

2018-03-13 08:54 549 查看
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 为
4000
获取的二进制文件
f.write(response1.content)

#如图3,图4

图1:



图2:



图3:



图4:



单个网页的抓取请转 http://blog.csdn.net/weixin_39701039/article/details/79527224
望有所帮助,望采纳!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  requests BeautifulSoup