抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

本文学习Python Web编程以及利用爬虫技术爬取豆瓣电影TOP250的电影名。

必备模块介绍

urllib

urllib提供了一系列用于操作URL的功能

  1. urllib.request.urlopen(url,data,timeout) 发起请求获取响应页面
1
2
3
4
import urllib.request
url = "http://www.baidu.com"
r = urllib.request.urlopen(url)
print(r.read())
  1. urllib.request.urlretrieve(url,filepath+filename) 发起请求下载文件
1
2
url = 'http://www.baidu.com/img/bd_logo1.png'
urllib.request.urlretrieve(url,filename='./bd.png')

Requests

  1. 安装
    1
    2
    pip install requests
    import requests
  2. 发送网络请求
    1
    2
    3
    4
    5
    6
    requests.get()
    requests.post(url)
    requests.put(url)
    requests.delete(url)
    requests.head(url)
    requests.options(url)
  3. 为URL传递参数
    1
    2
    3
    4
    payload = {'key1':'value1','key2':'value2'}
    r = requests.get("http://httpbin.org/get", params=payload)
    print(r.url)
    #http://httpbin.org/get?key2=value2&key1=value1
  4. 响应内容
    1
    2
    3
    r = requests.get("http://nizeyu.xyz")
    print(r.text)
    print(r.encoding)
  5. 二进制响应内容
    1
    2
    r = requests.get("http://nizeyu.xyz")
    print(r.content)
  6. 定制请求头(headers中可以加入cookies,在一些爬虫场景需要登录的情况下可以使用)
    1
    2
    header = {'conten-type':'application/json'}
    r = requests.get("http://nizeyu.xyz", header=headers)
  7. 复杂的POST请求
    1
    2
    payload = {'key1':'value1','key2':'value2'}
    r = requests.post("http://httpbin.org/post", data=payload)
  8. 响应状态码(适用于目录扫描场景)
    1
    2
    r = requests.get(url)
    print(r.status_code)
  9. 响应头
    1
    2
    r = requests.get(url)
    print(r.headers)
  10. Cookies
    1
    2
    r = requests.get(url)
    print(r.cookies['cookie_name'])
  11. 超时(单位是秒)
    1
    r = requests.get(url, timeout=0.1)
  12. 错误与异常
  • 遇到网络错误(DNS查询失败、拒绝连接)时,Requests会抛出一个ConnectionError异常。
  • 遇到无效的HTTP响应时,Requests会抛出一个HTTPError异常。
  • 遇到请求超时,Requests则会抛出Timeout异常。

爬虫

网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫

用爬虫最大的好处是批量且自动化得获取和处理信息。

爬虫练习–爬取豆瓣电影TOP250

  1. 查看爬取网页的源码,由此构造正则表达式

image-20200412133022069

  1. 定义get_one_page(url)函数去获取单个页面的响应内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import requests
import re
import json
from requests.exceptions import RequestException
import time

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

def get_one_page(url):
try:
res = requests.get(url)
if res.status_code == 200:
return res.text
return None
except RequestException:
return None
get_one_page("http://www.baidu.com")
  1. 分析每个页面的url组成部分,定义需要爬虫的网页url的命名规律。

    需要爬虫网页的URL
    https://movie.douban.com/top250?start=0&filter=
    https://movie.douban.com/top250?start=25&filter=
    https://movie.douban.com/top250?start=50&filter=
1
2
3
# 定义需要爬取的网页URl集合
def urls():
return ['https://movie.douban.com/top250?start={}&filter='.format(str(i)) for i in range(0,250,25)]
  1. 设置正则表达式匹配模式去匹配获取到的字符串
1
2
3
4
5
6
7
8
9
pattern = '<span class="title">(.*?)</span>'
key = []

for url in urls():
key += re.findall(pattern, get_one_page(url))
for k in key:
if "&" in k:
key.remove(k)
print(key)
['肖申克的救赎', '霸王别姬', '阿甘正传', '这个杀手不太冷', '美丽人生', '泰坦尼克号', '千与千寻', '辛德勒的名单', '盗梦空间', '忠犬八公的故事', '海上钢琴师', '楚门的世界', '三傻大闹宝莱坞', '机器人总动员', '放牛班的春天', '星际穿越', '大话西游之大圣娶亲', '熔炉', '疯狂动物城', '无间道', '龙猫', '教父', '当幸福来敲门', '怦然心动', '触不可及', '蝙蝠侠:黑暗骑士', '控方证人', '活着', '乱世佳人', '寻梦环游记', '末代皇帝', '摔跤吧!爸爸', '指环王3:王者无敌', '少年派的奇幻漂流', '何以为家', '飞屋环游记', '十二怒汉', '鬼子来了', '天空之城', '大话西游之月光宝盒', '哈尔的移动城堡', '素媛', '天堂电影院', '罗马假日', '闻香识女人', '辩护人', '搏击俱乐部', '哈利·波特与魔法石', '我不是药神', '死亡诗社', '教父2', '狮子王', '指环王2:双塔奇兵', '窃听风暴', '大闹天宫', '指环王1:魔戒再现', '两杆大烟枪', '美丽心灵', '饮食男女', '飞越疯人院', '猫鼠游戏', '黑客帝国', 'V字仇杀队', '钢琴家', '本杰明·巴顿奇事', '看不见的客人', '让子弹飞', '西西里的美丽传说', '海豚湾', '小鞋子', '拯救大兵瑞恩', '情书', '穿条纹睡衣的男孩', '音乐之声', '美国往事', '绿皮书', '致命魔术', '海蒂和爷爷', '低俗小说', '七宗罪', '沉默的羔羊', '蝴蝶效应', '春光乍泄', '被嫌弃的松子的一生', '禁闭岛', '心灵捕手', '布达佩斯大饭店', '阿凡达', '剪刀手爱德华', '勇敢的心', '摩登时代', '天使爱美丽', '喜剧之王', '加勒比海盗', '致命ID', '断背山', '杀人回忆', '幽灵公主', '狩猎', '阳光灿烂的日子', '请以你的名字呼唤我', '入殓师', '哈利·波特与死亡圣器(下)', '重庆森林', '第六感', '小森林 夏秋篇', '7号房的礼物', '消失的爱人', '红辣椒', '爱在黎明破晓前', '小森林 冬春篇', '玛丽和马克思', '侧耳倾听', '一一', '告白', '唐伯虎点秋香', '大鱼', '蝙蝠侠:黑暗骑士崛起', '阳光姐妹淘', '倩女幽魂', '超脱', '射雕英雄传之东成西就', '甜蜜蜜', '驯龙高手', '萤火之森', '超能陆战队', '无人知晓', '幸福终点站', '菊次郎的夏天', '恐怖直播', '借东西的小人阿莉埃蒂', '爱在日落黄昏时', '神偷奶爸', '完美的世界', '怪兽电力公司', '玩具总动员3', '风之谷', '血战钢锯岭', '傲慢与偏见', '上帝之城', '功夫', '时空恋旅人', '教父3', '电锯惊魂', '喜宴', '谍影重重3', '英雄本色', '天书奇谭', '人生果实', '岁月神偷', '被解救的姜戈', '七武士', '哪吒闹海', '我是山姆', '疯狂原始人', '纵横四海', '三块广告牌', '头号玩家', '心迷宫', '萤火虫之墓', '真爱至上', '达拉斯买家俱乐部', '釜山行', '荒蛮故事', '东邪西毒', '贫民窟的百万富翁', '记忆碎片', '爆裂鼓手', '黑天鹅', '你的名字。', '花样年华', '卢旺达饭店', '忠犬八公物语', '哈利·波特与阿兹卡班的囚徒', '头脑特工队', '黑客帝国3:矩阵革命', '模仿游戏', '一个叫欧维的男人决定去死', '雨人', '你看起来好像很好吃', '无敌破坏王', '未麻的部屋', '恋恋笔记本', '冰川时代', '哈利·波特与密室', '海街日记', '新世界', '海边的曼彻斯特', '二十二', '虎口脱险', '房间', '恐怖游轮', '惊魂记', '人工智能', '雨中曲', '魔女宅急便', '奇迹男孩', '疯狂的石头', '罗生门', '海洋', '爱在午夜降临前', '终结者2:审判日', '燃情岁月', '魂断蓝桥', '小偷家族', '初恋这件小事', '穿越时空的少女', '可可西里', '绿里奇迹', '2001太空漫游', '完美陌生人', '牯岭街少年杀人事件', '无耻混蛋', '阿飞正传', '城市之光', '新龙门客栈', '源代码', '香水', '谍影重重2', '青蛇', '谍影重重', '地球上的星星', '战争之王', '猜火车', '血钻', '色,戒', '遗愿清单', '大佛普拉斯', '朗读者', '浪潮', '步履不停', '彗星来的那一夜', '疯狂的麦克斯4:狂暴之路', '小萝莉的猴神大叔', '再次出发之纽约遇见你', '聚焦', '驴得水', '东京物语', '追随', '一次别离', '我爱你', '千钧一发', '黑鹰坠落', '九品芝麻官', '四个春天', '发条橙', '网络谜踪', 'E.T. 外星人', '哈利·波特与火焰杯', '撞车']

评论