百度贴吧爬虫

百度贴吧爬虫

环境: vs2017+python 3.6
第三方库:BeautifulSoup 4.6.0

爬的帖子:https://tieba.baidu.com/p/3954777778?see_lz=1&pn=1
第一次写爬虫,写的比较乱,请见谅

from urllib.request import urlopen
from bs4 import BeautifulSoup
from urllib.request import urlretrieve
import re#导入正则表达式

def get_post_id(postlist):#获取该页所有楼的post_id
    post_ids=[]#创建post_id列表
    for child in postlist:
        try:
            data_field=child['data-field']#找到这个字符串
            pattern=re.compile(r"\d{10,12}")#定义正则表达式样式
            matcher=re.search(pattern,data_field) #在标签中搜索post_id
            post_ids.append(matcher.group(0))#将其加入到post_id列表中
        except KeyError:
            pass
    return post_ids#返回post_id列表

def download_pictures(page,bsObj):#下载某一页的图片
    pic_list=bsObj.findAll("img",{"class":"BDE_Image"})#找到所有图片地址所在的标签

    i=0#对该页的图片计数
    for pic_url in pic_list:
        file_name="D:/pics/"+str(page)+'_'+str(i)+'.jpg'#定义图片保存路径
        urlretrieve(pic_url['src'],file_name)#下载图片
        i+=1
        print("正在下载第"+str(page)+'页第'+str(i)+"张图片")#输出提示信息

def get_total_page(url):#获取帖子页码上限
    html=urlopen(url)
    bsObj=BeautifulSoup(html)
    info=bsObj.findAll("span",{"class":"red"})#找到存有页码上限信息的标签
    total_page=int(info[-1].get_text())
    return total_page

def all_pages(url,total_page):
    page=1#帖子页码
    while page<=total_page:
        url+="&pn="+str(page)#根据帖子页码更改帖子网址
        try:
            html=urlopen(url)#访问网址
        except HTTPError:#如果网址不存在则退出循环
            break
        else:
            bsObj=BeautifulSoup(html)#创建一个BeautifulSoup对象

            #找到楼层列表的父标签
            postlist=bsObj.find("div",{"class":"p_postlist"}).children

            post_ids=get_post_id(postlist)#获取每层楼的post_id
            download_pictures(page,bsObj)#下载这一层的照片
        page+=1#页码加一,开始下一页

"""本程序可用于下载百度贴吧的图片(只看楼主的模式)"""


#url=input("请输入要爬取的百度贴吧帖子网址(例如https://tieba.baidu.com/p/3954777778)")
#url+="?see_lz=1"
url="https://tieba.baidu.com/p/3954777778?see_lz=1"

total_page=get_total_page(url)
all_pages(url,total_page)#下载所有页的图片

这里写图片描述
页码的标签

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值