爬虫技术详解:动态网页与静态网页数据爬取实践


概述

在当今信息爆炸的时代,网络爬虫技术成为了获取网络数据的重要手段。本文将详细介绍如何使用Python语言,针对动态网页和静态网页进行数据爬取。我们将依次探讨动态网页的第一个接口、第二个接口爬取,静态网页爬取,以及完整网页爬取的实现方法。

动态网页第一个接口爬取

requests.get及params的使用

在动态网页爬取中,requests.get方法用于发送HTTP GET请求,而params参数用于传递请求参数。
params参数通过先打开DevTools,即按住F12快捷键弹出或者右键网页检查弹出,然后在Network网络中刷新后的Fetch/XHR上的点击新出现api中的载荷中获取。
重点
1.找到你要爬取的正确的载荷,可能因为缓存,隐藏一部分,可能要到要爬取的url网页的先前的页面寻找载荷。
2.知道该网页是动态还是静态,如果判断出错,爬取也会不成功
3.通过减少爬取频率和同网段少量设备爬取来规避反爬,但还需要根据爬取时调试看爬取到的是不是要爬取的网页
以下是具体的代码实现:

import requests
import time
import pandas as pd

def getData():
    url = 'https://data.stats.gov.cn/easyquery.htm'
    data_list = []
    for year in range(2013, 2023):
        time.sleep(10)
        timestamp = int(time.time() * (10 ** 3))
        params = {
            'm': 'QueryData',
            'dbcode': 'hgnd',
            'rowcode': 'zb',
            'colcode': 'sj',
            'wds': '[]',
            'dfwds': f'[{{"wdcode": "zb", "valuecode": "A030201"}}, {{"wdcode": "sj", "valuecode": {str(year)}}}]',
            'k1': timestamp
        }
        response = requests.get(url=url, params=params, verify=False)
        if response.status_code != 200:
            print(f"Error: Received status code {response.status_code}")
            return

        try:
            res_json = response.json()
        except requests.exceptions.JSONDecodeError as e:
            print("Failed to decode JSON:", e)
            return
        data = res_json['returndata']['datanodes'][0]['data']['data']
        dic = {'year': year, 'data': data}
        data_list.append(dic)

    return data_list

def saveData():
    data_list = getData()
    df = pd.DataFrame(data_list)
    df.to_csv('data.csv', index=False)

saveData()

注意点

  1. JSON字符串处理:在处理JSON字符串时,需要注意编码问题,以及JSON解析错误处理。
  2. 传递列表格式:在构造params时,需要特别注意列表的格式,例如'dfwds'中的列表格式需要正确转义。
  3. 传参时,python会将列表解构,需要传递的为字符串,网页上的[ ]、数字需要加上‘ ’变为字符串,{ }需要用f"{{ }}"来出现‘{ }’

例子

# 正确传递列表格式
params = {
    'key': '["value1", "value2"]'
}

# 错误传递列表格式
params = {
    'key': 'value1, value2'  # 这是错误的格式
}

动态网页第二个接口爬取

API接口寻找

动态网页的API接口通常隐藏在网页的JavaScript代码中,可以通过浏览器的开发者工具进行查找。以下是动态网页第二个接口的爬取代码:

import requests
import pandas as pd

def getData():
    url = 'https://data.stats.gov.cn/search.htm'
    data_list = []
    for year in range(2013, 2023):
        parms = {
            's': str(year) + '人口出生率',
            'm': 'searchdata',
            'db': '',
            'p': 0
        }
        response = requests.get(url, params=parms)
        res_json = response.json()
        data = res_json['result'][0]['data']
        dic = {'year': year, 'data': data}
        data_list.append(dic)
    return data_list

def saveData():
    data_list = getData()
    df = pd.DataFrame(data_list)
    df.to_csv('people.csv', index=False)

saveData()

静态网页爬取

使用lxml获取静态网页数据

静态网页的数据通常直接嵌入在HTML中,可以使用lxml库进行解析。以下是静态网页爬取的代码示例:

from lxml import etree
import requests

def douban_all():
    url = 'https://movie.douban.com/chart'
    headers = {
{        "User-Agent": "Mozilla/5.0 ..."}
    }
    response = requests.get(url, headers=headers)
    body = response.text
    html = etree.HTML(body)
    result = html.xpath('//div[@class="pl2"]/a/text()')
    print(result)

def douban_img():
    url = 'https://movie.douban.com/chart'
    headers = {
        'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
                      " AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/131.0.0.0 Safari/537.36 Edg/131.0.0.0"
    }
    response = requests.get(url, headers=headers)
    body = response.text
    html = etree.HTML(body)
    result = html.xpath('//a[@class="nbg"]/img/@src')
    print(result)

    for img_path in result:
        name = img_path.split('/')[-1]
        response = requests.get(url=img_path, headers=headers)
        img = 'img/' + name
        with open(img, 'wb') as f:
            f.write(response.content)

douban_all()
douban_img()          

完整网页爬取

结合动态与静态网页爬取

完整网页爬取需要结合动态和静态网页爬取的技术。以下是完整网页爬取的代码示例:

1.爬取分类

import requests
from lxml import etree


def spider():
    # 想要爬取的网站的url
    url = "https://movie.douban.com/chart"
    # 伪装请求头
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"}
    # 发送get请求
    rs = requests.get(url, headers=header)
    html = etree.HTML(rs.text)
    print(rs.text)
    nameInfo = html.xpath("//div[@class='types']/span/a/text()")
    typeInfo = html.xpath("//div[@class='types']/span/a/@href")
    nameList = []
    typeList = []
    for i in range(len(typeInfo)):
        typeList.append(typeInfo[i].split("&")[1])
    print(nameInfo)
    print(typeList)
    return {1: nameInfo, 2: typeList}

2.根据分类爬取电影名称

def spider2():
    dict1 = spider()
    nameList = dict1[1]
    typeList = dict1[2]
    moviesNameList = []
    for i in range(len(typeList)):
        url = "https://movie.douban.com/j/chart/top_list?{}&interval_id=100%3A90&action=&start=0&limit=20".format(
            typeList[i])
        # 伪装请求头
        header = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36"}
        # 发送get请求
        rs = requests.get(url, headers=header)
        # info = json.loads(rs.text)
        info = rs.json()
        movieNameList = []
        movieNameDic = {}
        for j in info:
            movieNameList.append(j["title"])

        movieNameDic['type'] = nameList[i]
        movieNameDic['name'] = movieNameList

        print(movieNameDic)
        moviesNameList.append(movieNameDic)
    print(moviesNameList)

输出结果:

[{
	'rating': ['9.7', '50'],
	'rank': 1,
	'cover_url': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.jpg',
	'is_playable': True,
	'id': '1292052',
	'types': ['犯罪', '剧情'],
	'regions': ['美国'],
	'title': '肖申克的救赎',
	'url': 'https://movie.douban.com/subject/1292052/',
	'release_date': '1994-09-10',
	'actor_count': 25,
	'vote_count': 3036320,
	'score': '9.7',
	'actors': ['蒂姆·罗宾斯', '摩根·弗里曼', '鲍勃·冈顿', '威廉姆·赛德勒', '克兰西·布朗', '吉尔·贝罗斯', '马克·罗斯顿', '詹姆斯·惠特摩', '杰弗里·德曼', '拉里·布兰登伯格', '尼尔·吉恩托利', '布赖恩·利比', '大卫·普罗瓦尔', '约瑟夫·劳格诺', '祖德·塞克利拉', '保罗·麦克兰尼', '芮妮·布莱恩', '阿方索·弗里曼', 'V·J·福斯特', '弗兰克·梅德拉诺', '马克·迈尔斯', '尼尔·萨默斯', '耐德·巴拉米', '布赖恩·戴拉特', '唐·麦克马纳斯'],
	'is_watched': False
}, {
	'rating': ['9.6', '50'],
	'rank': 2,
	'cover_url': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2561716440.jpg',
	'is_playable': True,
	'id': '1291546',
	'types': ['剧情', '爱情', '同性'],
	'regions': ['中国大陆', '中国香港'],
	'title': '霸王别姬',
	'url': 'https://movie.douban.com/subject/1291546/',
	'release_date': '1993-07-26',
	'actor_count': 28,
	'vote_count': 2244227,
	'score': '9.6',
	'actors': ['张国荣', '张丰毅', '巩俐', '葛优', '英达', '蒋雯丽', '吴大维', '吕齐', '雷汉', '尹治', '马明威', '费振翔', '智一桐', '李春', '赵海龙', '李丹', '童弟', '沈慧芬', '黄斐', '徐杰', '黄磊', '冯远征', '杨立新', '方征', '周璞', '隋永清', '宋小川', '杜广沛'],
	'is_watched': False
}, {
	'rating': ['9.6', '50'],
	'rank': 3,
	'cover_url': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p1505392928.jpg',
	'is_playable': True,
	'id': '1296141',
	'types': ['剧情', '犯罪', '悬疑'],
	'regions': ['美国'],
	'title': '控方证人',
	'url': 'https://movie.douban.com/subject/1296141/',
	'release_date': '1957-12-17',
	'actor_count': 51,
	'vote_count': 619504,
	'score': '9.6',
	'actors': ['泰隆·鲍华', '玛琳·黛德丽', '查尔斯·劳顿', '埃尔莎·兰彻斯特', '约翰·威廉姆斯', '亨利·丹尼尔', '伊安·沃尔夫', '托林·撒切尔', '诺玛·威登', '尤娜·奥康纳', '茹塔·李', '贝丝·弗劳尔斯', '比尔·厄尔文', 'J·帕特·奥马利', '本·怀特', 'Paul Kruger', 'Jack Raine', 'Paul Power', '乔治·佩林', '威廉·H·奥布莱恩', '奥托拉内史密斯', 'Frank McClure', 'Colin Kenny', 'Jeanne Lafayette', 'Wilbur Mack', 'Fred Rapport', '利奥达·理查德斯', 'Glen Walters', 'Arthur Tovey', '伯特史蒂文斯', 'Cap Somers', 'Lucille Sewall', '斯考特西顿', '诺贝特·席勒', '杰弗里·塞尔', 'John Roy', 'Al Roberts', 'Art Howard', 'Stuart Hall', 'Francis Compton', 'Philip Tonge', '帕特里克·艾亨', '富兰克林·法纳姆', '玛乔丽·伊顿', '史蒂夫·卡鲁瑟斯', 'George Calliga', '乔治布鲁格曼', '丹尼·鲍沙其', 'Brandon Beach', '埃迪·贝克', '沃尔特·培根'],
	'is_watched': False
}, {
	'rating': ['9.5', '50'],
	'rank': 4,
	'cover_url': 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p457760035.jpg',
	'is_playable': True,
	'id': '1292722',
	'types': ['剧情', '爱情', '灾难'],
	'regions': ['美国', '墨西哥'],
	'title': '泰坦尼克号',
	'url': 'https://movie.douban.com/subject/1292722/',
	'release_date': '1998-04-03',
	'actor_count': 63,
	'vote_count': 2301707,
	'score': '9.5',
	'actors': ['莱昂纳多·迪卡普里奥', '凯特·温斯莱特', '比利·赞恩', '凯西·贝茨', '弗兰西丝·费舍', '格劳瑞亚·斯图尔特', '比尔·帕克斯顿', '伯纳德·希尔', '大卫·沃纳', '维克多·加博', '乔纳森·海德', '苏茜·爱米斯', '刘易斯·阿伯内西', '尼古拉斯·卡斯柯恩', '阿那托利·萨加洛维奇', '丹尼·努齐', '杰森·贝瑞', '伊万·斯图尔特', '艾恩·格拉法德', '乔纳森·菲利普斯', '马克·林赛·查普曼', '理查德·格拉翰', '保罗·布赖特威尔', '艾瑞克·布里登', '夏洛特·查顿', '博纳德·福克斯', '迈克尔·英塞恩', '法妮·布雷特', '马丁·贾维斯', '罗莎琳·艾尔斯', '罗切尔·罗斯', '乔纳森·伊万斯-琼斯', '西蒙·克雷恩', '爱德华德·弗莱彻', '斯科特·安德森', '马丁·伊斯特', '克雷格·凯利', '格雷戈里·库克', '利亚姆·图伊', '詹姆斯·兰开斯特', '艾尔莎·瑞雯', '卢·帕尔特', '泰瑞·佛瑞斯塔', '凯文·德·拉·诺伊', '詹姆斯·卡梅隆', '罗恩·多纳基', '史蒂文·奎里', '詹妮特·戈德斯坦恩', '琳达·克恩斯', '林凡 ', '马丁·哈伯', '马丁·莱恩', '德里克·李', '保罗·赫伯特', '艾利克斯·欧文斯-萨尔诺', 'Julene Renee', '季冠霖', '曲敬国', '竹内结子', '詹姆斯·霍纳', '姜广涛', '佐佐木澄江', '刘之玲'],
	'is_watched': False
}, {
	'rating': ['9.5', '50'],
	'rank': 5,
	'cover_url': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2372307693.jpg',
	'is_playable': True,
	'id': '1292720',
	'types': ['剧情', '爱情'],
	'regions': ['美国'],
	'title': '阿甘正传',
	'url': 'https://movie.douban.com/subject/1292720/',
	'release_date': '1994-06-23',
	'actor_count': 51,
	'vote_count': 2262417,
	'score': '9.5',
	'actors': ['汤姆·汉克斯', '罗宾·怀特', '加里·辛尼斯', '麦凯尔泰·威廉逊', '莎莉·菲尔德', '海利·乔·奥斯蒙', '迈克尔·康纳·亨弗里斯', '哈罗德·G·赫瑟姆', '山姆·安德森', '伊俄涅·M·特雷奇', '彼得·道博森', '希芳·法隆', '伊丽莎白·汉克斯', '汉娜·豪尔', '克里斯托弗·琼斯', '罗布·兰德里', '杰森·麦克奎尔', '桑尼·施罗耶', '艾德·戴维斯', '丹尼尔C.斯瑞派克', '大卫·布里斯宾', '德博拉·麦克蒂尔', '艾尔·哈林顿', '阿非莫·奥米拉', '约翰·沃德斯塔德', '迈克尔·伯吉斯', '埃里克·安德伍德', '拜伦·明斯', '斯蒂芬·布吉格沃特', '约翰·威廉·高尔特', '希拉里·沙普兰', '伊莎贝尔·罗斯', '理查德·达历山德罗', '迪克·史迪威', '迈克尔-杰斯', '杰弗里·布莱克', '瓦妮莎·罗斯', '迪克·卡维特', '马拉·苏查雷特扎', '乔·阿拉斯奇', 'W·本森·泰瑞', '约翰·列侬', '埃尔维斯·普雷斯利', '罗纳德·里根', '鲍勃·霍普', '约翰·肯尼迪', '理查德·尼克松', '吴俊全', '蒂莫西·麦克尼尔', '杰拉尔德·福特', '布雷特·赖斯'],
	'is_watched': False
}, {
	'rating': ['9.5', '50'],
	'rank': 6,
	'cover_url': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2578474613.jpg',
	'is_playable': True,
	'id': '1292063',
	'types': ['剧情', '喜剧', '爱情', '战争'],
	'regions': ['意大利'],
	'title': '美丽人生',
	'url': 'https://movie.douban.com/subject/1292063/',
	'release_date': '2020-01-03',
	'actor_count': 29,
	'vote_count': 1384385,
	'score': '9.5',
	'actors': ['罗伯托·贝尼尼', '尼可莱塔·布拉斯基', '乔治·坎塔里尼', '朱斯蒂诺·杜拉诺', '赛尔乔·比尼·布斯特里克', '玛丽萨·帕雷德斯', '霍斯特·布赫霍尔茨', '利迪娅·阿方西', '朱利亚娜·洛约迪切', '亚美利哥·丰塔尼', '彼得·德·席尔瓦', '弗朗西斯·古佐', '拉法埃拉·莱博罗尼', '克劳迪奥·阿方西', '吉尔·巴罗尼', '马西莫·比安奇', '恩尼奥·孔萨尔维', '吉安卡尔洛·科森蒂诺', '阿伦·克雷格', '汉尼斯·赫尔曼', '弗兰科·梅斯科利尼', '安东尼奥·普雷斯特', '吉娜·诺维勒', '理查德·塞梅尔', '安德烈提多娜', '迪尔克·范登贝格', '奥梅罗·安东努蒂', '沈晓谦', '张欣'],
	'is_watched': False
}, {
	'rating': ['9.5', '50'],
	'rank': 7,
	'cover_url': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p492406163.jpg',
	'is_playable': True,
	'id': '1295124',
	'types': ['剧情', '历史', '战争'],
	'regions': ['美国'],
	'title': '辛德勒的名单',
	'url': 'https://movie.douban.com/subject/1295124/',
	'release_date': '1993-11-30',
	'actor_count': 46,
	'vote_count': 1171131,
	'score': '9.5',
	'actors': ['连姆·尼森', '本·金斯利', '拉尔夫·费因斯', '卡罗琳·古多尔', '乔纳森·萨加尔', '艾伯丝·戴维兹', '马尔戈萨·格贝尔', '马克·伊瓦涅', '碧翠斯·马科拉', '安德烈·瑟韦林', '弗里德里希·冯·图恩', '克齐斯茨托夫·拉夫特', '诺伯特·魏塞尔', '维斯瓦夫·科马萨', '埃琳娜·勒文松', '奥拉夫·卢巴申科', '戈兹·奥托', '阿格尼兹卡·旺格', '玛雅·奥丝塔泽斯卡', '胡契克·卡勒塔', '安娜·穆查', '玛莎·比森', '艾尔文·莱德', '帕维·德朗柯', '路德格·皮斯特', '阿格涅兹卡·克鲁科沃娜', '约阿希姆·保罗·阿斯波克', '约亨·尼克尔', '耶日·诺瓦克', '塔德乌什·布拉德茨基', '亨里克·比斯塔', '马丁·塞梅洛格', '布兰科·拉斯蒂格', '吉恩·莱赫纳', '马瑞安·格林卡', '布拉德·雅各布维茨', '皮奥特·赛尔沃斯', '托马斯·德德克', '托马斯·莫里斯', '塔德乌什·胡克', '马切伊·奥尔洛斯', '埃兹拉·达甘', '拉米·希尔伯格', '马切伊·科兹罗斯基', '尤金纽斯·普里维任采夫', '拉齐亚·以色列'],
	'is_watched': False
}, {
	'rating': ['9.6', '50'],
	'rank': 8,
	'cover_url': 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2528965424.jpg',
	'is_playable': True,
	'id': '1461403',
	'types': ['剧情', '历史'],
	'regions': ['中国大陆'],
	'title': '茶馆',
	'url': 'https://movie.douban.com/subject/1461403/',
	'release_date': '1982',
	'actor_count': 48,
	'vote_count': 170159,
	'score': '9.6',
	'actors': ['于是之', '郑榕', '蓝天野', '英若诚', '黄宗洛', '童超', '金昭', '林连昆', '牛星丽', '谭宗尧', '童弟', '吴淑昆', '胡宗温', '程中', '李大千', '李源', '李翔', '张瞳', '任宝贤', '尚丽娟', '米铁增', '田春奎', '冯增祥', '雷飞', '林东升', '孟瑾', '孙峻峰', '平原', '曹世骧', '王大年', '王淑华', '张华', '丁海涛', '朱旭', '孙敬修', '曹孟浪', '何康理', '董行佶', '肖鹏', '杜广沛', '李容', '王领', '赵恕', '李廷栋', '张馨', '张福元', '王德立', '杨宝琮'],
	'is_watched': False
}, {
	'rating': ['9.4', '50'],
	'rank': 9,
	'cover_url': 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg',
	'is_playable': True,
	'id': '1295644',
	'types': ['剧情', '动作', '犯罪'],
	'regions': ['法国', '美国'],
	'title': '这个杀手不太冷',
	'url': 'https://movie.douban.com/subject/1295644/',
	'release_date': '1994-09-14',
	'actor_count': 23,
	'vote_count': 2388121,
	'score': '9.4',
	'actors': ['让·雷诺', '娜塔莉·波特曼', '加里·奥德曼', '丹尼·爱罗', '彼得·阿佩尔', '迈克尔·巴达鲁科', '艾伦·格里尼', '伊丽莎白·瑞根', '卡尔·马图斯维奇', '弗兰克·赛格', '麦温', '乔治·马丁', '罗伯特·拉萨多', '亚当·布斯奇', '马里奥·托迪斯科', '萨米·纳塞利', '埃莱娜·卡多纳', '让·雨果·安格拉德', '沈晓谦', '大塚明夫', 'Keith A. Glascoe', 'Arsène Jiroyan', '米歇尔·蒙塔纳里'],
	'is_watched': False
}, {
	'rating': ['9.4', '50'],
	'rank': 10,
	'cover_url': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2557573348.jpg',
	'is_playable': False,
	'id': '1291561',
	'types': ['剧情', '动画', '奇幻'],
	'regions': ['日本'],
	'title': '千与千寻',
	'url': 'https://movie.douban.com/subject/1291561/',
	'release_date': '2019-06-21',
	'actor_count': 43,
	'vote_count': 2350624,
	'score': '9.4',
	'actors': ['柊瑠美', '入野自由', '夏木真理', '菅原文太', '中村彰男', '玉井夕海', '神木隆之介', '内藤刚志', '泽口靖子', '我修院达也', '大泉洋', '小林郁夫', '上条恒彦', '小野武彦', '田壮壮', '王琳', '安田显', '户次重幸', '胡立成', '山像香', '斋藤志郎', '脇田茂', '彭昱畅', '井柏然', '周冬雨', '塔拉·斯特朗', '黛维·切斯', '迈克尔·切克利斯', '苏珊娜·普莱舍特', '约翰·拉森贝格', '迪·布拉雷·贝克尔', '苏珊·伊甘', '戴维·奥格登·施蒂尔斯', '莫娜·马歇尔', '詹妮弗·达林', '雪莉·琳恩', '杰森·马斯登', '杰克·安杰尔', '罗德格尔·邦帕斯', '保罗·伊丁', '鲍伯·伯根', '吉姆·瓦德', '菲尔·普洛克特'],
	'is_watched': False
}, {
	'rating': ['9.4', '50'],
	'rank': 11,
	'cover_url': 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p513344864.jpg',
	'is_playable': True,
	'id': '3541415',
	'types': ['剧情', '科幻', '悬疑', '冒险'],
	'regions': ['美国', '英国'],
	'title': '盗梦空间',
	'url': 'https://movie.douban.com/subject/3541415/',
	'release_date': '2010-09-01',
	'actor_count': 31,
	'vote_count': 2164645,
	'score': '9.4',
	'actors': ['莱昂纳多·迪卡普里奥', '约瑟夫·高登-莱维特', '艾利奥特·佩吉', '汤姆·哈迪', '渡边谦', '迪利普·劳', '基里安·墨菲', '汤姆·贝伦杰', '玛丽昂·歌迪亚', '皮特·波斯尔思韦特', '迈克尔·凯恩', '卢卡斯·哈斯', '李太力', '克莱尔·吉尔蕾', '马格努斯·诺兰', '泰勒·吉蕾', '乔纳森·吉尔', '水源士郎', '冈本玉二', '厄尔·卡梅伦', '瑞恩·海沃德', '米兰达·诺兰', '拉什·费加', '蒂姆·科勒赫', '妲露拉·莱莉', '迈克尔·加斯顿', '吉尔·马德雷尔', '玛格丽特·因索利亚', '维吉尔·布莱米', '布拉德·雅各布维茨', 'Natasha Beaumont'],
	'is_watched': False
}, {
	'rating': ['9.4', '50'],
	'rank': 12,
	'cover_url': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2614988097.jpg',
	'is_playable': True,
	'id': '1889243',
	'types': ['剧情', '科幻', '冒险'],
	'regions': ['美国', '英国', '加拿大'],
	'title': '星际穿越',
	'url': 'https://movie.douban.com/subject/1889243/',
	'release_date': '2014-11-12',
	'actor_count': 28,
	'vote_count': 1967922,
	'score': '9.4',
	'actors': ['马修·麦康纳', '安妮·海瑟薇', '杰西卡·查斯坦', '麦肯吉·弗依', '卡西·阿弗莱克', '迈克尔·凯恩', '马特·达蒙', '提莫西·查拉梅', '艾伦·伯斯汀', '约翰·利思戈', '韦斯·本特利', '大卫·吉亚西', '比尔·欧文', '托弗·戈瑞斯', '科莱特·沃夫', '弗朗西斯·X.麦卡蒂', '安德鲁·博尔巴', '乔什·斯图沃特', '莱雅·卡里恩斯', '利亚姆·迪金森', '杰夫·赫普内尔', '伊莱耶斯·加贝尔', '布鲁克·史密斯', '大卫·奥伊罗', '威廉姆·德瓦内', '拉什·费加', '格里芬·弗雷泽', '弗洛拉·诺兰'],
	'is_watched': False
}, {
	'rating': ['9.4', '50'],
	'rank': 13,
	'cover_url': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p479682972.jpg',
	'is_playable': True,
	'id': '1292064',
	'types': ['剧情', '科幻'],
	'regions': ['美国'],
	'title': '楚门的世界',
	'url': 'https://movie.douban.com/subject/1292064/',
	'release_date': '1998-06-05',
	'actor_count': 26,
	'vote_count': 1821654,
	'score': '9.4',
	'actors': ['金·凯瑞', '劳拉·琳妮', '艾德·哈里斯', '诺亚·艾默里奇', '娜塔莎·麦克艾霍恩', '安东尼·科隆', '马西娅·德波尼斯', 'Adam Tomei', '约翰·普莱舍', '澳澜·琼斯', 'Joe Minjares', '特里·金瑞利', '乔尔·麦金农·米勒', '冈本玉二', 'Jake Eberle', '马克·麦考利', '贾德森·沃恩', '彼得·克劳斯', '保罗·吉亚玛提', '菲利普·贝克·霍尔', '梅丽莎·菲茨杰拉德', '布莱尔·斯莱特', '珍妮特·米勒', '霍兰德·泰勒', '布赖恩·戴拉特', '哈里·谢尔'],
	'is_watched': False
}, {
	'rating': ['9.4', '50'],
	'rank': 14,
	'cover_url': 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2587099240.jpg',
	'is_playable': False,
	'id': '3011091',
	'types': ['剧情'],
	'regions': ['美国', '英国'],
	'title': '忠犬八公的故事',
	'url': 'https://movie.douban.com/subject/3011091/',
	'release_date': '2009-06-13',
	'actor_count': 22,
	'vote_count': 1451275,
	'score': '9.4',
	'actors': ['理查·基尔', '莎拉·罗默尔', '琼·艾伦', '罗比·萨布莱特', '艾瑞克·阿瓦利', '田川洋行', '杰森·亚历山大', '罗伯特·卡普荣', '凯文·德科斯泰', '高岛彩', '奇科', '莱拉', '福雷斯特', 'Ellen Becker-Gray', 'Ben Skinner', '达文尼亚·麦克法登', '贝茨·怀尔德', '亚美利哥·普雷休蒂', '盖尔·布格贾', '马丁·蒙塔纳', 'Michael Kelly', 'Raymond Alongi'],
	'is_watched': False
}, {
	'rating': ['9.4', '50'],
	'rank': 15,
	'cover_url': 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p1363250216.jpg',
	'is_playable': False,
	'id': '5912992',
	'types': ['剧情'],
	'regions': ['韩国'],
	'title': '熔炉',
	'url': 'https://movie.douban.com/subject/5912992/',
	'release_date': '2011-09-22',
	'actor_count': 23,
	'vote_count': 973536,
	'score': '9.4',
	'actors': ['孔刘', '郑有美', '金贤秀', '郑仁絮', '白承焕', '张光', '金民尚', '林贤成', '金周灵', '严孝燮', '全国焕', '崔镇浩', '金志映', '严智星', '许在浩', '张素妍', '金智怜', '张宥', '朴惠珍', '全宇材', '林贤成', '洪锡然', '郑亨锡'],
	'is_watched': False
}, {
	'rating': ['9.4', '50'],
	'rank': 16,
	'cover_url': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2184505167.jpg',
	'is_playable': True,
	'id': '1418019',
	'types': ['剧情', '动画', '奇幻', '古装'],
	'regions': ['中国大陆'],
	'title': '大闹天宫',
	'url': 'https://movie.douban.com/subject/1418019/',
	'release_date': '1961',
	'actor_count': 7,
	'vote_count': 465680,
	'score': '9.4',
	'actors': ['邱岳峰', '富润生', '毕克', '尚华', '于鼎', '李梓', '刘广宁'],
	'is_watched': False
}, {
	'rating': ['9.5', '50'],
	'rank': 17,
	'cover_url': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2505048077.jpg',
	'is_playable': True,
	'id': '1307856',
	'types': ['剧情'],
	'regions': ['中国大陆', '中国香港'],
	'title': '背靠背,脸对脸',
	'url': 'https://movie.douban.com/subject/1307856/',
	'release_date': '1994-09-10',
	'actor_count': 18,
	'vote_count': 151234,
	'score': '9.5',
	'actors': ['牛振华', '雷恪生', '李强', '句号', '王劲松', '戈治均', '佘南南', '张嘉益', '刘国祥', '徐学政', '林海海', '温谦', '马载军', '吴玮玲', '张艺', '韩炳杰', '杨亚洲', '王洪光'],
	'is_watched': False
}, {
	'rating': ['9.4', '50'],
	'rank': 18,
	'cover_url': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2173577632.jpg',
	'is_playable': True,
	'id': '1293182',
	'types': ['剧情'],
	'regions': ['美国'],
	'title': '十二怒汉',
	'url': 'https://movie.douban.com/subject/1293182/',
	'release_date': '1957-04-10',
	'actor_count': 13,
	'vote_count': 525450,
	'score': '9.4',
	'actors': ['亨利·方达', '马丁·鲍尔萨姆', '约翰·菲德勒', '李·科布', 'E.G.马绍尔', '杰克·克卢格曼', '爱德华·宾斯', '杰克·瓦尔登', '约瑟夫·史威尼', '埃德·贝格利', '乔治·沃斯科维奇', '罗伯特·韦伯', '约翰·萨沃卡'],
	'is_watched': False
}, {
	'rating': ['9.3', '50'],
	'rank': 19,
	'cover_url': 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2564556863.jpg',
	'is_playable': True,
	'id': '1307914',
	'types': ['剧情', '犯罪', '惊悚'],
	'regions': ['中国香港'],
	'title': '无间道',
	'url': 'https://movie.douban.com/subject/1307914/',
	'release_date': '2003-09-05',
	'actor_count': 34,
	'vote_count': 1442589,
	'score': '9.3',
	'actors': ['刘德华', '梁朝伟', '黄秋生', '曾志伟', '陈慧琳', '郑秀文', '陈冠希', '余文乐', '萧亚轩', '林家栋', '吴廷烨', '林迪安', '尹志强', '许金峰', '何华超', '利沙华', '区轩玮', '李天翔', '黄燕强', '姚文基', '余世腾', '苏伟南', '黎志伟', '梁皓楷', '张旭燊', '袁伟豪', '叶清', '洪智杰', '张艺', '杨容莲', '李叶健', '李华柱', '梁超怡', '曾健勇'],
	'is_watched': False
}, {
	'rating': ['9.3', '50'],
	'rank': 20,
	'cover_url': 'https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2574551676.jpg',
	'is_playable': True,
	'id': '1292001',
	'types': ['剧情', '音乐'],
	'regions': ['意大利'],
	'title': '海上钢琴师',
	'url': 'https://movie.douban.com/subject/1292001/',
	'release_date': '2019-11-15',
	'actor_count': 23,
	'vote_count': 1749633,
	'score': '9.3',
	'actors': ['蒂姆·罗斯', '普路特·泰勒·文斯', '比尔·努恩', '克兰伦斯·威廉姆斯三世', '梅兰尼·蒂埃里', '皮特·沃恩', '尼尔·奥布赖恩', '阿尔贝托·巴斯克斯', '加布里埃莱·拉维亚', '科里·巴克', '西德尼·科尔', 'Luigi De Luca', '尼古拉·迪·平托', '费米·依鲁福祖', '伊斯顿·盖奇', '凯文·麦克纳利', '布莱恩·普林格', '沙拉·鲁宾', '希思科特·威廉姆斯', '阿妮妲·扎格利亚', '安吉洛·迪洛雷塔', '吉达·布塔', '曲敬国'],
	'is_watched': False
}]

[{
	'剧情': ['肖申克的救赎', '霸王别姬', '控方证人', '泰坦尼克号', '阿甘正传', '美丽人生', '辛德勒的名单', '茶馆', '这个杀手不太冷', '千与千寻', '盗梦空间', '星际穿越', '楚门的世界', '忠犬八公的故事', '熔炉', '大闹天宫', '背靠背,脸对脸', '十二怒汉', '无间道', '海上钢琴师']
}, {
	'喜剧': ['美丽人生', '鬼子来了', '触不可及', '摩登时代', '大话西游之大圣娶亲', '疯狂动物城', '三傻大闹宝莱坞', '城市之光', '怦然心动', '寻梦环游记', '飞屋环游记', '罗马假日', '两杆大烟枪', '我不是药神', '让子弹飞', '大话西游之月光宝盒', '雨中曲', '喜宴', '玛丽和马克思', '绿皮书']
}, {
	'动作': ['这个杀手不太冷', '指环王3:王者无敌', '蝙蝠侠:黑暗骑士', '指环王2:双塔奇兵', '七武士', '指环王1:护戒使者', '黑客帝国', '让子弹飞', '进击的巨人 最终季 完结篇 前篇', '搏击俱乐部', '杀人回忆', '蝙蝠侠:黑暗骑士崛起', '勇敢的心', '攻壳机动队', '功夫', '阿凡达', '进击的巨人 最终季 完结篇 后篇', '超能陆战队', '加勒比海盗', '纵横四海']
}, {
	'爱情': ['霸王别姬', '泰坦尼克号', '阿甘正传', '美丽人生', '乱世佳人', '摩登时代', '大话西游之大圣娶亲', '三傻大闹宝莱坞', '芙蓉镇', '天堂电影院', '城市之光', '南海十三郎', '怦然心动', '哈尔的移动城堡', '罗马假日', '一一', '音乐之声', '生活多美好', '大话西游之月光宝盒', '春光乍泄']
}, {
	'科幻': ['盗梦空间', '星际穿越', '楚门的世界', '机器人总动员', '蝙蝠侠:黑暗骑士', '黑客帝国', '红辣椒', '攻壳机动队', '黑镜:圣诞特别篇', '超感猎杀:完结特别篇', '蝴蝶效应', '蝙蝠侠:黑暗骑士崛起', '2001太空漫游', '攻壳机动队2:无罪', '阿凡达', '超能陆战队', '黑客帝国3:矩阵革命', '大都会', '终结者2:审判日', '千钧一发']
}, {
	'动画': ['千与千寻', '大闹天宫', '机器人总动员', '进击的巨人 最终季 完结篇 前篇', '疯狂动物城', '龙猫', '天空之城', '天书奇谭', '哪吒闹海', '寻梦环游记', '飞屋环游记', '哈尔的移动城堡', '狮子王', '红辣椒', '未麻的部屋', '进击的巨人 最终季 完结篇 后篇', '玛丽和马克思', '攻壳机动队', '东京教父', '借东西的小人阿莉埃蒂']
}, {
	'悬疑': ['控方证人', '盗梦空间', '窃听风暴', '控方证人', '红辣椒', '未麻的部屋', '切腹', '搏击俱乐部', '惊魂记', '禁闭岛', '蝴蝶效应', '致命魔术', '致命ID', '杀人回忆', '第六感', '绿里奇迹', '追随', '十二怒汉(电视版)', '看不见的客人', '心迷宫']
}, {
	'惊悚': ['无间道', '蝙蝠侠:黑暗骑士', '红辣椒', '未麻的部屋', '搏击俱乐部', '惊魂记', '黑镜:圣诞特别篇', '禁闭岛', '蝴蝶效应', '沉默的羔羊', '致命魔术', '致命ID', '杀人回忆', '蝙蝠侠:黑暗骑士崛起', '第六感', '2001太空漫游', '末路狂花', '看不见的客人', '七宗罪', '无间道2']
}, {
	'恐怖': ['惊魂记', '电锯惊魂', '卡里加里博士的小屋', '电锯惊魂2', '闪灵', '生化危机', '异形', '怪谈', '孤儿怨', '小岛惊魂', '摄影机不要停!', '潜伏2', '僵尸叔叔', '回魂夜', '罗斯玛丽的婴儿', '招魂', '迷雾', '怪形', '电锯惊魂3', '万能钥匙']
}, {
	'纪录片': ['蒙古草原,天气晴', '三十二', '大法官金斯伯格', '海豚湾', '乡村里的中国', '久石让在武道馆:与宫崎骏动画一同走过的25年', '亲爱的,不要跨过那条江', '我的章鱼老师', '冲天', '地球之盐', '算命', '坂本龙一:杰作', '人生七年9', '寻找小糖人', '家园', '海洋', '人生七年2', '脸庞,村庄', '女人', '旅行到宇宙边缘']
}, {
	'短片': ['鹬', '回忆积木小屋', '山水情', '调音师(短片)', '火车进站', '雇佣人生', '尽管我们的手中空无一物', '人生七年1', '月球旅行记', '暴力云与送子鹳', '父与女', '百花深处', '雪孩子', '夜与雾', '电焊工波力', '月神', '对话的维度', '精神分裂症', '无翼鸟', '小蝌蚪找妈妈']
}, {
	'情色': ['西西里的美丽传说', '色,戒', '小姐', '苦月亮', '情人', '一树梨花压海棠', '戏梦巴黎', '大开眼戒', '巴黎野玫瑰', '女性瘾者:第一部', '女性瘾者:第二部', '性爱宝典', '洛丽塔', '爱神', '性、谎言和录像带', '我嫁了个怪蜀黍!', '色情男女', '不忠', '云上的日子', '再见箱舟']
}, {
	'音乐': ['海上钢琴师', '放牛班的春天', '钢琴家', '寻梦环游记', '机器人之梦', '绿皮书', '巴黎圣母院', '摇滚红与黑', '心灵奇旅', '爆裂鼓手', '莫扎特传', '昨天', '波西米亚狂想曲', '再次出发之纽约遇见你', '海盗电台', '健听女孩', '幻想曲', '蓝白红三部曲之蓝', '五至七时的克莱奥', '幻想曲2000']
}, {
	'歌舞': ['三傻大闹宝莱坞', '狮子王', '音乐之声', '雨中曲', '摇滚红与黑', '芝加哥', '伊丽莎白', '被嫌弃的松子的一生', '跳出我天地', '吉屋出租:百老汇剧场版', '莫扎特!', '罗密欧与朱丽叶', '悲惨世界', '爱丽丝梦游仙境', '冰雪奇缘', '来自远方', '美女与野兽', '巴斯特·斯克鲁格斯的歌谣', '小美人鱼', '爱乐之城']
}, {
	'家庭': ['活着', '海蒂和爷爷', '灿烂人生', '当幸福来敲门', '饮食男女', '小鞋子', '一一', '东京物语', '摔跤吧!爸爸', '喜宴', '我是山姆', '爱·回家', '哀乐中年', '寻子遇仙记', '过年', '7号房的礼物', '地球上的星星', '勇士', '楢山节考', '秋日奏鸣曲']
}, {
	'儿童': ['小鞋子', '天堂回信', '你看起来好像很好吃', '地球上的星星', '伴我同行', '怪兽电力公司', '跳出我天地', '熊出没之过年', '冬冬的假期', '奇迹男孩', '三毛从军记', '巴黎淘气帮', '蝴蝶', '孙子从美国来', '邋遢大王奇遇记', '小情人', '天生一对', '月升王国', '我的九月', '压路机和小提琴']
}, {
	'传记': ['末代皇帝', '钢琴家', '南海十三郎', '当幸福来敲门', '猫鼠游戏', '美丽心灵', '音乐之声', '莫娣', '摔跤吧!爸爸', '绿皮书', '勇敢的心', '卢旺达饭店', '隐藏人物', '剃头匠', '童年往事', '帝国的毁灭', '奥本海默', '模仿游戏', '达拉斯买家俱乐部', '聚焦']
}, {
	'历史': ['茶馆', '辛德勒的名单', '横空出世', '末代皇帝', '活着', '乱世佳人', '无言的山丘', '影武者', '悲情城市', '大决战之辽沈战役', '勇敢的心', '卢旺达饭店', '隐藏人物', '从海底出击', '赛德克·巴莱(上):太阳旗', '赛德克·巴莱(下):彩虹桥', '帝国的毁灭', '蓝风筝', '奥本海默', '赛德克·巴莱']
}, {
	'战争': ['美丽人生', '辛德勒的名单', '高山下的花环', '乱世佳人', '钢琴家', '穿条纹睡衣的男孩', '拯救大兵瑞恩', '大独裁者', '地下', '沉静如海', '你逃我也逃', '影武者', '西西里的美丽传说', '勇敢的心', '卢旺达饭店', '虎口脱险', '光荣之路', '赛德克·巴莱(上):太阳旗', '赛德克·巴莱(下):彩虹桥', '大决战之辽沈战役']
}, {
	'犯罪': ['肖申克的救赎', '控方证人', '这个杀手不太冷', '无间道', '教父', '教父2', '蝙蝠侠:黑暗骑士', '美国往事', '控方证人', '猫鼠游戏', '两杆大烟枪', '无间道(正序版)', '未麻的部屋', '完美的世界', '教父3', '上帝之城', '偷自行车的人', '沉默的羔羊', '低俗小说', '杀人回忆']
}, {
	'西部': ['黄金三镖客', '淘金记', '让子弹飞', '革命往事', '与狼共舞', '黄昏双镖客', '被解救的姜戈', '燃情岁月', '西部往事', '八恶人', '回到未来3', '巴斯特·斯克鲁格斯的歌谣', '不可饶恕', '无人区', '小马王', '虎豹小霸王', '荒野大镖客', '大地惊雷', '正午', '碧血金沙']
}, {
	'奇幻': ['千与千寻', '大闹天宫', '指环王3:王者无敌', '进击的巨人 最终季 完结篇 前篇', '大话西游之大圣娶亲', '龙猫', '哈利·波特与魔法石', '天空之城', '指环王2:双塔奇兵', '天书奇谭', '哪吒闹海', '少年派的奇幻漂流', '寻梦环游记', '哈尔的移动城堡', '指环王1:护戒使者', '生活多美好', '进击的巨人 最终季 完结篇 后篇', '大话西游之月光宝盒', '本杰明·巴顿奇事', '哈利·波特与死亡圣器(下)']
}, {
	'冒险': ['盗梦空间', '星际穿越', '机器人总动员', '指环王3:王者无敌', '海蒂和爷爷', '疯狂动物城', '龙猫', '哈利·波特与魔法石', '天空之城', '七武士', '指环王2:双塔奇兵', '哪吒闹海', '少年派的奇幻漂流', '飞屋环游记', '哈尔的移动城堡', '指环王1:护戒使者', '狮子王', '黄金三镖客', '哈利·波特与死亡圣器(下)', '哈利·波特与阿兹卡班的囚徒']
}, {
	'灾难': ['泰坦尼克号', '釜山行', '流浪地球2', '后天', '一九四二', '独立日', '2012', '流浪地球', '唐山大地震', '勇往直前', '地心引力', '群鸟', '海啸奇迹', '空中营救', '世界末日', '极限逃生', '卡桑德拉大桥', '惊天危机', '潘多拉', '救火英雄']
}, {
	'武侠': ['倩女幽魂', '射雕英雄传之东成西就', '新龙门客栈', '东邪西毒', '笑傲江湖2:东方不败', '卧虎藏龙', '黄飞鸿', '侠女', '少林寺', '鹿鼎记', '黄飞鸿之二:男儿当自强', '双旗镇刀客', '武状元苏乞儿', '师父', '黄飞鸿之三:狮王争霸', '鹿鼎记2:神龙教', '倩女幽魂2:人间道', '画江湖之天罡', '太极张三丰', '方世玉']
}, {
	'古装': ['大闹天宫', '大话西游之大圣娶亲', '大话西游之月光宝盒', '倩女幽魂', '唐伯虎点秋香', '九品芝麻官', '射雕英雄传之东成西就', '新龙门客栈', '东邪西毒', '青蛇', '兹山鱼谱', '梁祝', '笑傲江湖2:东方不败', '侠女', '黄飞鸿', '辉夜姬物语', '少林寺', '鹿鼎记', '黄飞鸿之二:男儿当自强', '武状元苏乞儿']
}, {
	'运动': ['摔跤吧!爸爸', '灌篮高手', '勇士', '百万美元宝贝', '弱点', '洛奇', '追梦赤子心', '极速风流', '泳者之心', '铁拳男人', '坏孩子的天空', '极速车王', '卡特教练', '光荣之路', '世上最快的印第安摩托', '光辉岁月', '我在雨中等你', '铁甲钢拳', '百元之恋', '愤怒的公牛']
}, {
	'黑色电影': ['日落大道', '杀手', '倒扣的王牌', '双重赔偿', '煤气灯下', '爱德华大夫', 'M就是凶手', '第三人', '火车怪客', '通往绞刑架的电梯', '历劫佳人', '猎人之夜', '上海小姐', '疤面人', '漩涡之外']
}]

总结

本文详细介绍了动态网页和静态网页的爬取技术,包括requests.getparams的使用,JSON字符串处理的注意点,以及如何使用lxml获取静态网页数据。通过这些技术,我们可以有效地从网络中获取所需的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值