前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你用python爬取猫眼TOP100电影信息

手把手教你用python爬取猫眼TOP100电影信息

作者头像
Python与Excel之交
发布2021-08-05 14:11:33
1.7K1
发布2021-08-05 14:11:33
举报
文章被收录于专栏:Python与Excel之交

本文仅供学习、交流使用,不做商业用途,如有问题请及时联系我们以作处理。

在生活中,我们如果想要对网站上的数据进行使用的话,一般我们都会使用复制粘贴的方法进行复制过来,但如果数据量很多的话,你就会像个机械人一样做着重复的事,而使用Python爬虫可以轻松的从网站上抓取我们想要的数据,不必要做重复的事情。本文将基于爬取猫眼TOP100电影信息并存储为例,介绍Python爬虫的基本流程。

文末见完整代码!

开发工具

  • Python 3.8
  • Pycharm 2019.3.3
  • requests
  • lxml
  • pandas

相关模块可用 pip 命令在终端安装:

代码语言:javascript
复制
pip install 模块名称

分析网页

目标网址:

代码语言:javascript
复制
https://maoyan.com/board/4?

首先,我们右键点击检查,发现我们需要的内容都在源代码中,可以确定该网页是静态网页。

拉到网页底部,点击下一页查看url变化:

代码语言:javascript
复制
https://maoyan.com/board/4?requestCode=36ab6b13b9ed768d4cbc767966c850dfligic&offset=0
https://maoyan.com/board/4?requestCode=36ab6b13b9ed768d4cbc767966c850dfligic&offset=10
https://maoyan.com/board/4?requestCode=36ab6b13b9ed768d4cbc767966c850dfligic&offset=20

发现url中的offset参数会发生递增变化,每次增加10,后期我们只需要更改url后面的offse参数即可进行翻页爬取。

导入模块

这里需要用到requests模块进行请求数据,用lxml中的xpath语法进行数据的提取;利用pandas进行数据的保存。

代码语言:javascript
复制
import requests
from lxml import etree
import pandas as pd

请求数据

用pandas创建一个DataFrame,用来后面对数据的保存。

代码语言:javascript
复制
df = pd.DataFrame()
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2'}
res = requests.get('https://maoyan.com/board/4?requestCode=36ab6b13b9ed768d4cbc767966c850dfligic&offset=0', headers=headers).text

User-Agent字段可以通过下列操作进行复制过来,然后封装在字典中:

代码语言:javascript
复制
→在网页中点击鼠标右键
→检查
→Network
→All
→任一响应
→headers
→User-Agent

提取数据

猫眼电影网页数据,全部都在dd标签里面,所以先用xpath获取dd标签。

然后再遍历dd标签通过xpath语法提取里面的数据。

其中主演信息中有些不必要的字符以及空行,这里用strip去掉空行,用replace替换掉不必要的字符。

代码语言:javascript
复制
from lxml import etree
res_html = etree.HTML(res)
dd = res_html.xpath('.//dl[@class="board-wrapper"]/dd')
for i in dd:
    title = ''.join(i.xpath('./div/div/div[1]/p[1]/a/text()'))  # 电影名称
    score = ''.join(i.xpath('./div/div/div[2]/p//text()'))  # 电影评分
    releasetime = ''.join(i.xpath('./div/div/div[1]/p[3]/text()'))  # 上映时间
    star = ''.join(i.xpath('./div/div/div[1]/p[2]/text()')).strip().replace('主演:', '').replace(',','、')# 主演

保存数据

调用pd.DataFrame进行数据保存,通过pd.concat合并DataFrame,为防止出现乱码,在保存时对encoding声明为utf-8。

代码语言:javascript
复制
data = pd.DataFrame({'电影名称': [title], '评分': [score], '上映时间': [releasetime], '主演': [star]})
df = pd.concat([df, data])
df.to_csv('猫眼100.csv', encoding='utf-8', index=False)

看下效果:

完整代码

代码语言:javascript
复制
import requests
from lxml import etree
import pandas as pd

df = pd.DataFrame()
headers = {
    'Cookie': '__mta=53784983.1609867868406.1609869025866.1609869032119.6; uuid_n_v=v1; uuid=C4E02E104F7B11EB9E3AF34C3494A72A1C93742559CC4DDBB90397F2A20798D8; _csrf=b5269d72193fe4d5360139b352da277f01e72c9b470bdd4f1021a2300f717b09; Hm_lvt_703e94591e87be68cc8da0da7cbd0be2=1609867865; _lx_utm=utm_source%3DBaidu%26utm_medium%3Dorganic; _lxsdk_cuid=176d39a37710-07155560cc3f59-303464-100200-176d39a3772c8; _lxsdk=C4E02E104F7B11EB9E3AF34C3494A72A1C93742559CC4DDBB90397F2A20798D8; Hm_lpvt_703e94591e87be68cc8da0da7cbd0be2=1609869032; _lxsdk_s=176d39a3777-a98-f67-28a%7C%7C13',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36'
}
for page in range(0, 10):
    res = requests.get('https://maoyan.com/board/4?requestCode=36ab6b13b9ed768d4cbc767966c850dfligic&offset='+str(page*10), headers=headers).text
    res_html=etree.HTML(res)
    dd = res_html.xpath('.//dl[@class="board-wrapper"]/dd')
    for i in dd:
        title = ''.join(i.xpath('./div/div/div[1]/p[1]/a/text()'))
        score = ''.join(i.xpath('./div/div/div[2]/p//text()'))
        releasetime = ''.join(i.xpath('./div/div/div[1]/p[3]/text()'))
        star = ''.join(i.xpath('./div/div/div[1]/p[2]/text()')).strip().replace('主演:', '').replace(',','、')
        print(title, score, releasetime, star, sep='|')
        data = pd.DataFrame({'电影名称': [title], '评分': [score], '上映时间': [releasetime], '主演': [star]})
        df = pd.concat([df, data])
df.to_csv('猫眼100.csv', encoding='utf-8',index=False)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python与Excel之交 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析网页
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档