小白回顾------爬取猫眼Top100

昨天写的一个爬虫基础课程爬取猫眼Top100,今天分享一下:
爬取猫眼Top100:
Part I:
(1):我们需要对猫眼电影的url进行分析
在这里插入图片描述
由这个网页分析可以看出,猫眼电影网页的规律,每次offset后面加10就能转到下一页
所以我们就可以获取Top榜单的每一页内容
(2):接下来我们需要获取网页内容:
先导入import requests库:

 html=request.get(url)

这个函数可以获取url里面的内容
在这里插入图片描述
我们可以输出html.text检测一下

print(html.text)
这里可能会出现错误,所以我们要查看一下status_code是否为200
print(html.status_code)
如果为200说明可以进行爬取,不为200说明请求失败

所以我们一般需要取构造一个请求头,来模拟浏览器去告诉网页访问它的是浏览器而不是爬虫

headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}

headers里面的内容可以通过网页找到:
在这里插入图片描述
然后复制黏贴就行了

故: html=request.get(url,headers=headers) 获取到了网页内容

(3)现在我们就可以对网页内容进行提取,获取我们想要的内容:
在这里插入图片描述
这部分内容是我们想要的,虽然在这只是一篇电影的内容,但下面每一篇电影的内容格式和他如出一辙,所以我们只需要拿它做样例即可

这里我们需要导入import re这个库写正则表达式进行提取
在这里插入图片描述
注意:.*?只是对内容进行匹配,并不进行获取(.*?)里的内容才是我们需要获取的内容
现在获取到我们想要的信息就可以进行匹配了:
代码:

def parse_one_page(html):
    pattern='''<div class="board-item-main">
      <div class="board-item-content">
              <div class="movie-item-info">
        <p class="name"><a href="/films/.*?" title="(.*?)" data-act="boarditem-click" data-val="{movieId:.*?}">.*?</a></p>
        <p class="star">
               (.*?)
        </p>
<p class="releasetime">(.*?)</p>    </div>'''
    items = re.findall(pattern, html, re.S)
    return items‘

这里讲解一下re.S的用法:
因为当我们获取匹配内容的时候会有’\n’(换行),而.*?只能匹配不含换行符的其他任意字符,所以我们再写多行正则表达式的时候需要加上re.S

(4)获取到匹配的内容后我们就可以写入文档了:
接下来看一些代码:

import requests
import re
def parse_one_page(html):
    pattern='''<div class="board-item-main">
      <div class="board-item-content">
              <div class="movie-item-info">
        <p class="name"><a href="/films/.*?" title="(.*?)" data-act="boarditem-click" data-val="{movieId:.*?}">.*?</a></p>
        <p class="star">
               (.*?)
        </p>
<p class="releasetime">(.*?)</p>    </div>'''
    items = re.findall(pattern, html, re.S)
    return items

def get_more_page_ranklist(path):
    headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'}
    with open(path, 'w') as f:
        for i in range (0,10):
            url = 'https://maoyan.com/board/4?offset='
            url=url+str(i*10)
            r=requests.get(url,headers=headers,timeout=3)
            data=parse_one_page(r.text)
            try:
                for j in range(0,len(data)):

                    f.write(str(str(data[j]))+'\n')
                print('第' + str(i) + ' page 抓取成功')
            except:
                print('第'+str(i)+' page 抓取失败')
    f.close()




if __name__=='__main__':
    path='D:/爬虫/Top.txt'
    html=get_more_page_ranklist(path)

在这里插入图片描述
在这里插入图片描述

由于本人太菜,格式无法弄的太好看,所以仍需学习,所以希望高手能多多指教共同进步

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值