python爬虫之百度贴吧图片爬取

实现目的

对目标贴吧的图片进行爬取,然后下载,保存到程序所在的文件夹

这里做了两个实验,源码可以直接运行,相关依赖的包需要自己安装

两种爬取区别

请求方式
解析方式
下载方式
都有不同,可以进行比较学习,多种方式的爬取
##源码(一)


import urllib
import urllib.request
import re
#目标贴吧的地址
url = "http://tieba.baidu.com/p/2460150866"

#地址请求与解析
page = urllib.request.urlopen(url)
html = page.read()
#print(html)   

#正则匹配
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg)
#图片链接列表
imglist = re.findall(imgre, html.decode('utf-8'))
x = 0
print("start dowload pic")
for imgurl in imglist:
    print(imgurl)
    resp = urllib.request.urlopen(imgurl)
    respHtml = resp.read()
    picFile = open('%s.jpg' % x, "wb")
    picFile.write(respHtml)
    picFile.close()
    x = x+1
print("done")

完成图片如下
python爬虫之百度贴吧图片爬取_第1张图片

源码(二)

import requests
import urllib,os,re
from urllib.request import urlretrieve
from bs4 import BeautifulSoup
from pyquery import PyQuery as pq

# 设置UA模拟浏览器
head={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
def get_page(url):
    try:
        print('正在请求网页',url)
        response=requests.get(url,headers=head)
        if response.status_code==200:
            return response.text
            print('请求网页成功')
        return None
    except Exception:
        print('请求网页失败,请检查后重试')
        return None
def parse_page(html):
    # TODO 1 BeautifulSoup
    print('正在解析网页....')
    html = BeautifulSoup(html, 'lxml')
    # 查找图片链接
    img_html = html.find_all('img', class_='BDE_Image')
    # 图片链接信息提取
    imag_urls = [img_url.get('src') for img_url in img_html]
    print('图片信息采集完成.....')

    # TODO 2 pyquery
    # imag_html=pq(html)
    # image_urls=imag_html(' .BDE_Image')
    # imag_urls=[image_url.get('src') for image_url in image_urls]
    
    #todo 3 re
    # req_pattern=re.compile('')
    # imag_urls=re.findall(req_pattern,html)

    return imag_urls


def download_image(imag_urls):
    global i
    if 'images' not in os.listdir():
        os.makedirs('images')
    #下载图片
    for imag_url in imag_urls:
        print('正在下载第{}张图片'.format(i))
        urlretrieve(url=imag_url,filename='images/'+'第{}张.jpg'.format(i))
        i+=1

def main(page):
    url='https://tieba.baidu.com/p/5113603072?pn={}'.format(page)
    html=get_page(url)
    imag_urls=parse_page(html)
    download_image(imag_urls)
if __name__ == '__main__':
    i=1
    #最多20页,全部爬取
    for page in range(1,21):
        main(page)
    print('下载完成')

python爬虫之百度贴吧图片爬取_第2张图片

你可能感兴趣的:(python爬虫实战)