爬虫贴吧大题

wzzyhg 48 0
from lxml import etree          # 导入 lxml,用来解析网页
import requests                 # 导入 requests,用来发送网络请求

tieba_name = input('贴吧名:')   # 用户输入要爬的贴吧名称
startPage = int(input('开始页:'))   # 输入开始页
endPage = int(input('结束页:'))     # 输入结束页

url = 'https://tieba.baidu.com/f?'  # 贴吧主页面 URL

# 遍历每一页
for page in range(startPage, endPage+1):
    pn = (page - 1) * 50  # 每页偏移量:第1页是0,第2页是50,以此类推
    response = requests.get(url, params={'kw': tieba_name, 'pn': pn})  # 发请求获取页面
    content = etree.HTML(response.text)  # 用 lxml 解析 HTML

    # 获取该页所有帖子链接(相对地址)
    links = content.xpath('//a[@class="j_th_tit "]/@href')

    # 遍历每个帖子链接
    for link in links:
        full_url = 'https://tieba.baidu.com' + link  # 拼接完整帖子地址
        resp = requests.get(full_url)                # 请求帖子页面
        html = etree.HTML(resp.text)                 # 解析帖子 HTML

        # 提取帖子中的图片地址
        imgs = html.xpath('//img[@class="BDE_Image"]/@src')
        for img_url in imgs:
            img_data = requests.get(img_url).content  # 下载图片内容(二进制)
            name = img_url[-10:]                      # 取图片地址最后10位当文件名
            with open('img/' + name, 'wb') as f:      # 写入本地 img 文件夹
                f.write(img_data)

发表评论 取消回复
表情 图片 链接 代码

分享