爬取贴吧小项目

动手尝试:

  • 获取新浪首页,查看response.text 和response.content.decode()的区别(作业)
  • 实现任意贴吧的爬虫,保存网页到本地;

    • 要求: 可以指定贴吧名称, 起始页与结束页
  • 思路:

    • 找出访问贴吧内容的URL的规律
      http://tieba.baidu.com/f?kw=吧名&ie=utf-8&pn=(页码-1)*50
      
    • 代码实现
      • 根据规律生成访问贴吧内容页面的URL,放到列表中
      • 遍历URL,发送请求,获取内容
      • 把内容页面写到文件中
  • 代码
import requests

# 定义一个贴吧爬虫类
class TiebaCrawler(object):
    # 基础URL
    basic_url = "http://tieba.baidu.com/f?kw={}&ie=utf-8&pn={}"
#     初始化方法
    def __init__(self, name, start, end):
        self.name = name
        self.start = start
        self.end = end

    #  2.1  根据规律生成访问贴吧内容页面的URL,放到列表中
    def get_url_list(self):
        # 定义一个list
        # url_list = []
        # # 生成URL放入list中
        # for i in range(self.start, self.end+1):
        #     url = self.basic_url.format(self.name, (i-1)*50)
        #     url_list.append(url)
        #  #返回list的列表
        # return url_list
        # 扁平化写法: 推荐,简洁
        return [self.basic_url.format(self.name, (i-1)*50) for i in range(self.start, self.end+1)]

    # 写一个方法下载URL中内容
    def download_from_url(self, url):
        response = requests.get(url)
        return response.content

    # 写一个方法把内容写到文件中
    def write_to_file(self, filename, content):
        with open(filename, "wb") as f:
            f.write(content)

    # 下载方法,存储主逻辑
    def run(self):
        # 2.1  根据规律生成访问贴吧内容页面的URL,放到列表中
        url_list = self.get_url_list()
        # print(url_list)
        # 遍历URL,发送请求,获取内容
        for url in url_list:
           content = self.download_from_url(url)
           # 文件名称: 贴吧名称_页码
           file_name = "{}_第{}页.html".format(self.name, url_list.index(url)+1)
           # 把内容页面写到文件中
           self.write_to_file(file_name, content)
        print("写入完成")

if __name__ == '__main__':
    # 思路: 从用户角度去考虑代码写法
    # 你要下载那个贴吧内容创建一个对象,指定贴吧名称,起始页和结束页,调用run方法就可以了
    ts = TiebaCrawler("电影", 1, 5)
    ts.run()

猜你喜欢

转载自blog.csdn.net/xiaochendefendoushi/article/details/81124913