python爬虫日志(6)小小实践

经过3天的学习,现在对简单的网页基本可以爬取想爬取的信息了,但还无法应对网站一些复杂的反爬虫措施。

今天利用目前为止所学的知识,试着爬取了煎蛋网几页图片并下载到本地。

#首先还是先导入所需的库
import requests
import base64   #这个库我也是第一用,它的功能貌似是用于加密解密的,具体怎么用,后面再研究
import urllib.request
import time
from bs4 import BeautifulSoup

urls=['http://jandan.net/pic/page-{}'.format(i) for i in range(226,228)]#一个列表储存所有的网页地址
headers={'User-Agent':'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
cnt=0 #用于记录下载的图片数目,也方便命名
folder_path='D://pictures/'  #我的路径

def get_images(url):  #自定义的函数,参数是要爬取的网页的地址
    data=requests.get(url,headers=headers) #请求
    soup=BeautifulSoup(data.text,'lxml') #解析,这两步不用多讲了
    imgurl=soup.find_all(class_='img-hash') #find_all函数在之前也讲过了,功能就是字面意思,找到所有的符合条件的元素
    time.sleep(2)  #延迟2秒,一些网站如果过于频繁的访问,可能会触发反爬虫机制,这里延迟2秒,确保爬取过程顺利进行
    real_urls=[]   #因为网站的反爬取措施,所有的图片的真实地址都被加了密,所以不能用普通方法爬取,要先解密
    for j in imgurl:
        real_urls.append(base64.b64decode(j.text).decode('utf-8')) 
    #base64.b64decode(j.text).decode('utf-8')这个函数的返回值就是真实网页的地址,不过这个方法不确保适用其他加密方法
    for i in real_urls:
        _url='http:'+i   #构造地址
        global cnt
        cnt=cnt+1    #每个图片的序号作为文件名
        if 'jpg' in i:   #有的文件的图片,有的是动态图
            address=folder_path+str(cnt)+'.jpg'
        elif 'gif' in i:
            address = folder_path + str(cnt) + '.gif'
        urllib.request.urlretrieve(_url,address)
    print("done")
#最后调用函数
for url in urls:
    get_images(url)

最后成果。因为是只是练习,所以并没有爬取很多图片,只爬了两页。学习爬虫的朋友在练习时也适当爬取就好,不然频繁访问,会给服务器造成很大压力。自己学习的同时也不要对他人造成困扰。

转载于:https://my.oschina.net/u/3914536/blog/1861077

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值