python爬虫-抓取百度贴吧帖子图片

简介: 本爬虫可以爬取百度贴吧帖子中的图片,代码有待完善,欢迎大家指教!出处:https://github.com/jingsupo/python-spider/blob/master/day03/07tieba.

本爬虫可以爬取百度贴吧帖子中的图片,代码有待完善,欢迎大家指教!
出处:https://github.com/jingsupo/python-spider/blob/master/day03/07tieba.py

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import requests, time
from lxml import etree


class Tiebaspider(object):
    def __init__(self, tiebaname, start_page, end_page):
        self.base_url = "http://tieba.baidu.com"
        self.headers = {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"}
        self.name = tiebaname
        self.start = start_page
        self.end = end_page

        # 第一层解析 xpath
        self.first_xpath = '//div[@class="t_con cleafix"]/div/div/div/a/@href'
        # 第二层解析 xpath
        self.second_xpath = '//img[@class="BDE_Image"]/@src'

    # 发送请求
    def send_request(self, url, params={}):
        time.sleep(1)
        try:
            response = requests.get(url, params=params, headers=self.headers)
            return response.content
        except Exception as e:
            print e

    # 写入文件
    def write_file(self, data, page):
        print page
        filename = 'tieba/' + page
        with open(filename, 'w') as f:
            f.write(data)

    # 解析数据
    def parse_data(self, data, xpath):
        # 转换html类型
        html_data = etree.HTML(data)
        # 解析
        data_list = html_data.xpath(xpath)

        return data_list

    # 调度运行
    def run(self):
        for page in range(self.start, self.end + 1):
            pn = (page - 1) * 50
            params = {
                'kw': self.name,
                'pn': pn
            }

            # 发送第一次请求
            first_response = self.send_request(self.base_url + '/f?', params=params)
            # 解析提取子链接 每一条单独的帖子
            first_data_list = self.parse_data(first_response, self.first_xpath)

            # 请求每条帖子的数据
            for link in first_data_list:
                # 拼接每条帖子的url
                url = self.base_url + link

                # 发送第二次请求
                second_response = self.send_request(url)
                # 解析提取每个帖子里面的图片地址
                second_data_list = self.parse_data(second_response, self.second_xpath)

                # 发送图片请求 保存图片到本地
                for img_url in second_data_list:
                    # 发送请求
                    image_file = self.send_request(img_url)
                    # 截取图片链接后15位作为文件名
                    page = img_url[-15:]
                    # 保存图片
                    self.write_file(image_file, page)


if __name__ == '__main__':
    tiebaname = '美女'
    start_page = 1
    end_page = 1

    spider = Tiebaspider(tiebaname, start_page, end_page)
    spider.run()
目录
相关文章
|
6天前
|
数据采集 Python
爬虫实战-Python爬取百度当天热搜内容
爬虫实战-Python爬取百度当天热搜内容
76 0
|
6天前
|
缓存 API 定位技术
使用Python调用百度地图API实现地址查询
使用Python调用百度地图API实现地址查询
136 0
|
6天前
|
数据采集 JSON JavaScript
Python爬虫案例:抓取猫眼电影排行榜
python爬取猫眼电影排行榜数据分析,实战。(正则表达式,xpath,beautifulsoup)【2月更文挑战第11天】
85 2
Python爬虫案例:抓取猫眼电影排行榜
|
6天前
|
数据可视化 Python
百度搜索:蓝易云【使用Python的数据可视化库Matplotlib实现折线图教程。】
通过Matplotlib的丰富功能,你可以进一步自定义折线图,例如添加图例、设置线条样式、修改坐标轴范围等。希望这个教程对你有所帮助,如果有任何进一步的疑问,请随时提问。
137 0
|
6天前
|
机器学习/深度学习 数据挖掘 Python
百度搜索:蓝易云【Python基本操作详解。】
这些是Python的一些基本操作示例,希望对你有所帮助。Python具有丰富的功能和语法,可以实现更复杂的任务和项目。通过不断学习和实践,你可以更好地掌握和应用Python编程技巧。
72 2
|
7月前
|
Linux Python
百度搜索:蓝易云【Centos 7系统安装python 3.9.10详细教程。】
现在,你已经成功在CentOS 7系统上安装了Python 3.9.10。你可以使用 `python3.9`命令来运行Python 3.9.10版本的解释器。请根据实际需要进行配置和使用。
232 0
|
6天前
|
数据采集 存储 Rust
Rust高级爬虫:如何利用Rust抓取精美图片
Rust高级爬虫:如何利用Rust抓取精美图片
|
6天前
|
自然语言处理 API 语音技术
Python加百度语音API实现文字转语音功能
Python加百度语音API实现文字转语音功能
67 0
|
6天前
|
Ubuntu Python
百度搜索:蓝易云【ubuntu系统python映射教程】
现在,你已经成功在Ubuntu系统中映射了指定的Python版本。请确保替换 `VERSION`为你要映射的实际Python版本号。
51 1
|
6天前
|
Java Python
百度搜索:蓝易云【Java执行Python代码的两种方法(Jython与ProcessBuilder)】
通过使用Jython或ProcessBuilder,您可以在Java中执行Python代码并与两种编程语言进行交互。选择哪种方法取决于您的需求和偏好。请根据实际情况选择适合您的项目的方法。
42 0