爬虫--初体验(从认识到获取电影排行)

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

    语言:Python                     IDE(开发环境):PyCharm

    模块:request 、re

第一部分:获取网页的源代码

一、安装request包

pip install request

二、使用request的get方法得到网页的回应

resp = requests.get(url, headers=headers, params=pra)

其中:

  1.url是网站的意思,参数中以字符串的形式代入

  2.headers是headers是解决requests请求反爬的方法之一,调整它可以伪装身份

  3.params是一些参数设置

三、得到网站的信息

print(type(res))
print(res.status_code)        # 获取相应状态码
print(type(res.text))
print(res.cookies)            # 可存储与用户相关的信息

print(res.json())             # 输出网页源代码的两种方式 
print(res.text)               

栗子:获取豆瓣网页的源代码:

import requests

url = 'https://movie.douban.com/typerank?'        

pra = {                        # 网页的参数可以在网页中按F12查取
    'type': '24', 
    'interval_id': '100:90',
    'action': '',
    'start': 0,
    'limit': '20',
}
                               # 查请求头和pra的做法一样
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                         'Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.7062 SLBChan/25'}
resp = requests.get(url, headers=headers, params=pra)
print(resp.text)
# print(resp.json())
resp.close()             # 善始善终

第二部分:选择提取网页信息

pip install re

这个部分我们将要用到re模块,该模块能帮我们挑选出所有符合正则的数据内容

# (手动注释) 至于正则表达式的内容我就不过多赘述了,大伙感兴趣的话可以去b站学习一下

在这里我仅做一个小李子:

import re

# findall 匹配字符串中所有的符合正则的内容
lst = re.findall(r"\d+", '我的学号是1000400035,1000400001')
print(lst)


# finditer 匹配字符串中所有的内容[返回的是迭代器]  从迭代器中拿到内容需要 .group()
it = re.finditer(r"\d+", '我的学号是1000400035,1000400001')
for i in it:
    print(i.group())

# search返回的结果是match对象 拿数据需要 .group()      search找到一个就返回
s = re.search(r"\d+", '我的学号是1000400035,1000400001')
print(s.group())

# match是从头开始匹配的
s = re.match(r"\d+", '1000400035,1000400001')
print(s.group())

输出结果:

['2007400035', '2007400001']

2007400035
2007400001

2007400035

2007400035

有了这个认识,我们就上点强度啦。

任务:提取网页源代码内容中特定的信息,如序号和人物名称

<div class='jay'><span id='1'>郭麒麟</span></div>
        <div class='jj'><span id='2'>宋铁</span></div>
        <div class='jolin'><span id='3'>大聪明</span></div>
        <div class='sylar'><span id='4'>范思哲</span></div>
        <div class='tory'><span id='5'>胡说八道</span></div>

做法:

com = re.compile(r"<div class='.*?'><span id='(?P<id>.*?)'>(?P<haha>.*?)</span></div>", re.S)   # re.S : 让.能匹配换行符
obj = com.finditer(s)
for i in obj:
    print(i.group('id'), i.group("haha"))

其中的(?P<id>.*?)是提取信息的一种方式,id是提取到的信息的代号

输出结果如下:

1 郭麒麟
2 宋铁
3 大聪明
4 范思哲
5 胡说八道

第三部分:综合运用resquest和re模块,获取豆瓣电影排行榜

# 先得到网页的源代码     ----------requests
# 通过re来获取有效的信息  ---------re
import requests
import re

url = 'https://movie.douban.com/top250'
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.7062 SLBChan/25 "}
resp = requests.get(url, headers=headers)

page_content = resp.text            # 拿到网页源代码

# 下面开始解析数据

obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?<p class="">.*?<br>('
                 r'?P<year>.*?)&n.*?</p>.*?<span class="rating_num" property="v:average">(?P<evaluate>.*?)'
                 r'</span>.*?<span>(?P<number>.*?)人评价</span>', re.S)

result = obj.finditer(page_content)
for i in result:
    print("年份是:", i.group('year').strip(), "电影名字是:", i.group("name"),
          "评分是:", i.group('evaluate'), '评价人数是:', i.group('number'))     # .strip是消除年份前面的一大堆空白
结果:
年份是: 1994 电影名字是: 肖申克的救赎 评分是: 9.7 评价人数是: 2697297
年份是: 1993 电影名字是: 霸王别姬 评分是: 9.6 评价人数是: 2000135
年份是: 1994 电影名字是: 阿甘正传 评分是: 9.5 评价人数是: 2024951
年份是: 1997 电影名字是: 泰坦尼克号 评分是: 9.4 评价人数是: 1984500
年份是: 1994 电影名字是: 这个杀手不太冷 评分是: 9.4 评价人数是: 2167745
年份是: 1997 电影名字是: 美丽人生 评分是: 9.6 评价人数是: 1243237
年份是: 2001 电影名字是: 千与千寻 评分是: 9.4 评价人数是: 2101338
年份是: 1993 电影名字是: 辛德勒的名单 评分是: 9.6 评价人数是: 1037310
年份是: 2010 电影名字是: 盗梦空间 评分是: 9.4 评价人数是: 1937109
年份是: 2014 电影名字是: 星际穿越 评分是: 9.4 评价人数是: 1642543
年份是: 2009 电影名字是: 忠犬八公的故事 评分是: 9.4 评价人数是: 1321680
年份是: 1998 电影名字是: 楚门的世界 评分是: 9.3 评价人数是: 1559973
年份是: 1998 电影名字是: 海上钢琴师 评分是: 9.3 评价人数是: 1577903
年份是: 2009 电影名字是: 三傻大闹宝莱坞 评分是: 9.2 评价人数是: 1754281
年份是: 2008 电影名字是: 机器人总动员 评分是: 9.3 评价人数是: 1240380
年份是: 2004 电影名字是: 放牛班的春天 评分是: 9.3 评价人数是: 1223585
年份是: 2002 电影名字是: 无间道 评分是: 9.3 评价人数是: 1256752
年份是: 2016 电影名字是: 疯狂动物城 评分是: 9.2 评价人数是: 1782802
年份是: 1995 电影名字是: 大话西游之大圣娶亲 评分是: 9.2 评价人数是: 1439696
年份是: 2011 电影名字是: 熔炉 评分是: 9.3 评价人数是: 876248
年份是: 1957 电影名字是: 控方证人 评分是: 9.6 评价人数是: 489804
年份是: 1972 电影名字是: 教父 评分是: 9.3 评价人数是: 897851
年份是: 2006 电影名字是: 当幸福来敲门 评分是: 9.2 评价人数是: 1429513
年份是: 2011 电影名字是: 触不可及 评分是: 9.3 评价人数是: 1015803
年份是: 2010 电影名字是: 怦然心动 评分是: 9.1 评价人数是: 1718079

从结果可以看出:

  哥哥的霸王别姬是相当受欢迎的,并且程序只能够获取当前网页的电影排行榜,想要更多的排行还需要我们自己手动切换网站。(更换网址就好了,其他信息是一样滴)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值