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)
本文作者为wzzyhg,转载请注明。