百度贴吧爬虫

百度贴吧爬虫

环境: 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)#下载所有页的图片

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

### 关于百度贴吧爬虫代码的评论与反馈 网络上对于百度贴吧爬虫代码存在多种讨论和评价。一些开发者分享了利用`requests`库获取网页内容并结合`BeautifulSoup`解析HTML文档的经验[^3]。例如,在某些技术论坛中,有用户指出通过设置合理的请求头(headers),可以有效模拟浏览器行为,从而提高数据抓取的成功率。 然而,值得注意的是,针对验证码处理这一常见挑战,并非所有场景都需要复杂的技术手段来应对;当遇到少量验证码时,可以选择手动输入的方式解决问题;而在频繁遭遇验证码的情况下,则建议借助第三方打码服务平台的帮助[^1]。 此外,关于基于Python实现的爬虫程序的设计考量方面,安全性、可靠性和性能优化等因素受到了广泛关注。为了确保项目的长期稳定运行,应当重视异常情况下的错误恢复机制建设,同时也要注意保护目标网站资源不被过度访问而造成负担[^2]。 ```python import requests from bs4 import BeautifulSoup def get_tieba_content(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") # 假设我们要提取帖子标题列表作为例子 titles = [] for title_tag in soup.find_all('a', class_='j_th_tit'): titles.append(title_tag.string) return titles ``` 此段代码展示了如何使用`requests`发送HTTP GET请求至指定URL地址,并运用`BeautifulSoup`对象解析返回的内容,进而从中抽取所需的信息片段——这里以收集贴子标题为例进行了简单说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值