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

望有所帮助,望采纳!!




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值