zoukankan      html  css  js  c++  java
  • 爬取豆瓣

    import json
    
    import requests
    
    
    class DoubanSpider:
        def __init__(self):
            self.start_url = "https://movie.douban.com/j/search_subjects?type=tv&tag={}&sort=recommend&page_limit=20&page_start={}"
            self.tv_type_url = "https://movie.douban.com/j/search_tags?type=tv&source="
            self.headers = {
                "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1",
            }
    
        def parse_url(self, url):
            """发送请求,获取响应"""
            print(url)
            response = requests.get(url, headers=self.headers)
            return response.content.decode()
    
        def get_content_list(self, json_str, json_data):
            """提取数据"""
            dict_ret = json.loads(json_str)
            content_list = dict_ret[json_data]
            return content_list
    
        def save_content_list(self, content_list,data_type):
            """保存"""
            with open("douban.txt", "a", encoding="Utf-8") as f:
                for content in content_list:
                    content["data_type"] =data_type
                    f.write(json.dumps(content, ensure_ascii=False))
                    f.write("
    ")  # 写入换行符,进行换行
            print("保存成功")
    
        def run(self):
            """实现主要逻辑"""
            tv_type_json_str = self.parse_url(self.tv_type_url)
            tv_type_list = self.get_content_list(tv_type_json_str, "tags")
            for tv_type in tv_type_list:
                num = 0
                while True:
                    # 1.start_url
                    url = self.start_url.format(tv_type, num)
                    # 2.发送请求,获取响应
                    json_str = self.parse_url(url)
                    # 3.提取TV数据
                    content_list = self.get_content_list(json_str, "subjects")
                    # 4.保存
                    self.save_content_list(content_list,tv_type)
                    if len(content_list) < 20:
                        break
                    # 5.构造下一页的url地址,进入循环
                    num += 1
    
    
    if __name__ == '__main__':
        douban_spider = DoubanSpider()
        douban_spider.run()
  • 相关阅读:
    第二节:如何正确使用WebApi和使用过程中的一些坑
    nodejs中function*、yield和Promise的示例
    关于nodejs访问mysql的思考
    nodejs使用log4js记录日志
    nodejs初识
    Spring学习笔记(入门)
    mybatis使用注解开发
    MyBatis配置文件中的常用配置
    using 自动释放资源示例
    Java将byte[]和int的互相转换
  • 原文地址:https://www.cnblogs.com/King-boy/p/13173862.html
Copyright © 2011-2022 走看看