Python简易爬虫爬取百度贴吧图片

news/2024/7/19 9:59:26 标签: python, 爬虫

  

   通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地。(Python版本为3.6.0)

一.获取整个页面数据

  

def getHtml(url):
    page=urllib.request.urlopen(url)
    html=page.read()
    return html

 说明: 

  向getHtml()函数传递一个网址,就可以把整个页面下载下来.
  urllib.request 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据.

 

二.筛选页面中想要的数据

  在百度贴吧找到了几张漂亮的图片,想要下载下来.使用火狐浏览器,在图片位置鼠标右键单单击有查看元素选项,点进去之后就会进入开发者模式,并且定位到图片所在的前段代码

 

 

现在主要观察图片的正则特征,编写正则表达式.

reg=r'src="(https://imgsa[^>]+\.(?:jpeg|jpg))"'
#参考正则

编写代码

def getImg(html):
    reg=r'src="(https://imgsa[^>]+\.(?:jpeg|jpg))"'
    imgre = re.compile(reg)
    imglist = re.findall(imgre,html.decode('utf-8'))
    return imglist

说明:

   re.compile() 可以把正则表达式编译成一个正则表达式对象.

   re.findall() 方法读取html 中包含 imgre(正则表达式)的数据。

      运行脚本将得到整个页面中包含图片的URL地址。

三.将页面筛选的数据保存到本地

  编写一个保存的函数

def saveFile(x):
    if not os.path.isdir(path):
        os.makedirs(path)
    t = os.path.join(path,'%s.img'%x)
    return  t

 

完整代码:

'''
Created on 2017年7月15日

@author: Administrator
'''
import urllib.request,os
import re

def getHtml(url):
    page=urllib.request.urlopen(url)
    html=page.read()
    return html

path='D:/workspace/Python1/reptile/__pycache__/img'

def saveFile(x):
    if not os.path.isdir(path):
        os.makedirs(path)
    t = os.path.join(path,'%s.img'%x)
    return  t

html=getHtml('https://tieba.baidu.com/p/5248432620')
 
print(html)

print('\n')

def getImg(htnl):
    reg=r'src="(https://imgsa[^>]+\.(?:jpeg|jpg))"'
    imgre=re.compile(reg)
    imglist=re.findall(imgre,html.decode('utf-8'))
    x=0
    for imgurl in imglist:
        urllib.request.urlretrieve(imgurl,saveFile(x))
        print(imgurl)
        x+=1
        if x==23:
            break
    print(x)
    return imglist

getImg(html)
print('end')

 核心是用到了urllib.request.urlretrieve()方法,直接将远程数据下载到本地

最后,有点问题还没有完全解决,这里也向大家请教一下.

  当下载图片超过23张时会报错:

    urllib.error.HTTPError: HTTP Error 500: Internal Server Error
  不知道是什么问题,求助.

转载于:https://www.cnblogs.com/fyqx/p/7257976.html


http://www.niftyadmin.cn/n/532454.html

相关文章

反射、泛型读取XML后动态创建实例并赋值

前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容。那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能。网上的例子倒也不少&#xf…

Arduino开发版学习计划--蜂鸣器

文章内容参考:http://www.cnblogs.com/xiaowuyi/p/3343757.html 遇到不懂的方法,可以查看Arduino自带的API 就直接点击arduino的IDE里面菜单的Help(帮助)按钮里面的reference(参考)按钮,你就会发…

IoC, DI, SL, DIP 依赖注入,控制反转

化简为繁把人绕晕版: 首先得先说清几个名词 IoC, DI, SL, DIP。 IoC(控制反转)目前比较流行的两种方式 DI(依赖注入模式) 和 SL(服务器定位模式),DI 是遵循 DIP(依赖反…

Unity ParticleSystem 修改 startSize startColor

ParticleSystem ps GetComponent<ParticleSystem>();var main ps.main;var color Color.red;main.startSize new ParticleSystem.MinMaxCurve(1, 3);main.startColor new ParticleSystem.MinMaxGradient(color);

傻瓜方法求集合的全部子集问题(java版)

给定随意长度的一个集合。用一个数组表示&#xff0c;如{"a", "b","c"}&#xff0c;求它的全部子集。结果是{ {a}, {b}, {c}, {a,b}, {a,c}, {b,c}, {a,b,c}}和一个空集。以下讲的就是怎样用一个原始的傻瓜方法&#xff08;非算法&#xff09;求…

什么是值类型,什么是引用类型

概念&#xff1a;值类型直接存储其值&#xff0c;而引用类型存储对其值的引用。部署&#xff1a;托管堆上部署了所有引用类型。 引用类型&#xff1a;基类为Objcet 值类型&#xff1a;均隐式派生自System.ValueType&#xff1a; 值类型&#xff1a; byte&#xff0c;short&am…

Unity动画状态机Animator 与 Animation

在Unity中有两个动画系统&#xff0c;Animation和Animator&#xff0c;它们两个虽然都是关于动画播放的组件&#xff0c;但它们之间有很多的不同点。Animation是老版本就存在的动画系统组件&#xff0c;但Animator是unity4.6版本之后才拥有的组件&#xff1b;控制一个动画的播放…

中断向量表

内存地址(十六进制)对应向量号(十六进制)中断用途BASIC中断向量0x3C4 - 0x3FFF1-FF未使用0x218 - 0x3C386-F0BASIC程序运行时提供给BASIC解释程序作用0x200 - 0x21780-85为BASIC保留0x1E0 - 0x1FF78-7F未使用0x1DC - 0x1DF77硬件中断150x1D8 - 0x1DB76硬件中断140x1D4 - 0x1D77…