首页 新闻页 用python写爬虫----爬取电视剧基本信息

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

关键词:爬虫,爬虫代理,动态IP代理

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

工具:python、互联网、谷歌浏览器 mport 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()

为了防止反爬虫机制的开启,我们在爬取的过程中要使用爬虫代理,一般会选择动态IP代理。给大家推荐河马IP代理智能链路优质IP线路,最优化资源使用、最大化吞吐率、最小化响应时间,保护用户的隐私信息,实现100%高匿。