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

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

    工具: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()

你可能感兴趣的:(用python写爬虫----爬取电视剧基本信息)