Python2爬取贴吧多页图片

本文介绍了一种使用Python爬取百度贴吧图片的方法,通过urllib和re库获取和解析图片URL,实现多页图片的自动下载及保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

爬取贴吧多页图片,并保存在本地文件夹

在Windows7、eclipse环境上开发

结合Python现有库urllib、urllib2和re进行爬虫编程

相关库下载使用现有封装库Anaconda2,已包含本爬虫需要的所有库

import urllib
import urllib2
import re

# 根据url获取网页html内容
def getHtmlContent(url):
    page = urllib2.Request(url)
    page.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2214.111 Safari/537.36')
    #加headers, 模拟浏览器agent;head中有一个user-agent每次都换不同的模拟代理
    response = urllib2.urlopen(page)
    html = response.read().decode('utf-8')#设置相应编码格式
    return html

# 从html中解析出所有jpg图片的url
# 百度贴吧html中jpg图片的url格式为:<img ... src="XXX.jpg" pic_ext=...>
# 不同帖子的图片URL略有不同,可通过审查元素查看相应的url格式,适当调整
def getJPGs(html):
    # 解析jpg图片url的正则
    jpgReg = re.compile(r'<img.+?src="(.+?\.jpg)" pic_ext')  # 注:这里最后加一个'pic_ext'是为了提高匹配精确度
    # 解析出jpg的url列表
    jpgs = re.findall(jpgReg, html) 
    #图片url列表
    #print jpgs
    return jpgs

# 用图片url下载图片并保存成制定文件名
def downloadJPG(imgUrl, fileName):
    urllib.urlretrieve(imgUrl, fileName)

# 批量下载图片,保存到F盘zdl文件夹
def batchDownloadJPGs(url,amount):
    # 用于给图片命名
    #count = 1
    path='F:/bizhi/'
    amount=str(amount)
    #for url in imgUrls:
    aa=''.join([path, amount+'.jpg'])
    downloadJPG(url, aa)
    print '正在下载第'+str(amount)+'张'
        #count = count + 1#考虑分页的图片名自动叠加而不是替换
       
def main():
    l=[]
    amount=0
    #爬取前三页代码
    for i in range(3):#for循环解决分页问题
        url="https://tieba.baidu.com/p/3840085725?pn="+str(i)
        html = getHtmlContent(url)
        jpgs = getJPGs(html)
        l+=jpgs
        
        #download(url)
    for url in l:#定义for循环,便于图片命名
        amount+=1
        batchDownloadJPGs(url,amount)
if __name__ == '__main__':
    main()
    print "下载完成"


待完善之处:(希望评论有良策

    爬取效率有待提高;

    虽然增加了header模拟浏览器agent,但有时还是会被浏览器发现爬虫行为,出现socket error;(可通过设置相应检查点和抛出相关异常以及更换代理IP解决)

    爬取图片时,遇到图片url存在中文编码有时会出现异常;

爬虫参考文章(感谢):

    Python爬取贴吧多页图片

    socket error解决方法

    以及其他文章,找不到链接了...


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值