欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

用python写爬虫----爬取电视剧基本信息

程序员文章站 2022-05-02 17:43:31
...

    刚刚入门学习爬虫,试着爬取豆瓣的电视剧信息练手。废话不多说,进入正题。

    工具:python、互联网、谷歌浏览器

import json
import requests


class TvSpider:
    '''豆瓣电视爬虫'''

    def __init__(self, country):
        '''
        爬虫类的初始化
        :param country: 要爬去的国家,命名需与豆瓣的相契合
        '''
        # 要爬取的电视的国家全称
        self.country = country
        # 要爬去电视列表的第一页 在豆瓣电视剧的列表也找到items开头的请求,
        self.url = 'https://m.douban.com/rexxar/api/v2/subject_collection/filter_tv_{}_hot/items?start=0&count=18'.format(
            country)
        self.headers = {
            "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1",
            # 关联的url,必须加,否则豆瓣的反扒措施会让你一无所获
            "Referer": "https://m.douban.com/tv/"}

    def write_data(self, file_dict, filename):
        '''定义文件写入函数 传入一个字典 和文件名'''
        with open(filename, 'w', encoding='utf-8') as f:
            f.write(json.dumps(file_dict["subject_collection_items"], indent=4, ensure_ascii=False))

    def parse_url(self):
        '''请求网址 获取返回的json数据'''
        try:
            # 发出get请求 获取数据
            html_str = requests.get(self.url, verify=False, headers=self.headers)
            html_str.encoding = 'utf-8'
            return html_str.text
        except Exception as e:
            html_str = None
            print(e)
            return html_str

    def run(self):
        '''爬取的主要逻辑'''
        # 1.根据初始化的country获取地一页数据及电视剧的总数量
        # 组织url
        html_str = self.parse_url()
        # 解析数据
        file_dict = json.loads(html_str)
        total = file_dict['total']
        # 豆瓣每一页的数量
        step = 18
        for i in range(18, int(total), step):
            # 写入上次获取到的数据
            self.write_data(file_dict, self.country + '{}.json'.format(int(i / 18)))
            # 重新组织url
            if i + 18 >= int(total):
                count = int(total) - i
                url = self.url.replace('start={}&count=18'.format(i - 18), 'start={}&count={}'.format(i, count))
            else:
                url = self.url.replace('start={}'.format(i - 18), 'start={}'.format(i))
            # 请求url
            html_str = self.parse_url()
            # 解析数据
            file_dict = json.loads(html_str)
            #


if __name__ == '__main__':
    # american 是豆瓣在设计url时设计的美国地区对应的名,需要观察各个地区的名,来获取其他地区
    # 此处仅仅作为示范
    spider = TvSpider('american')
    spider.run()

相关标签: 爬虫 豆瓣