【python】爬虫:爬取豆瓣top250电影名单

参考

Python 爬虫介绍
【Python+爬虫】爆肝两个月!拜托三连了!这绝对是全B站最用心(没有之一)

概述

requests做http请求豆瓣top250电影名单,用BeautifulSoup分析爬回的html信息,提取电影名以及评分,最后prettytable显示.
在这里插入图片描述

requests

参考

Python requests 模块

简介

Python requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。

requests 模块比 urllib 模块更简洁。

安装库

在这里插入图片描述

可以用pycharm下面的终端,输入

pip install requests

在命令行调出python环境也行

此外可以直接在pycharm的设置里安装
在这里插入图片描述

在这里插入图片描述

代码

# 导入requests库
import requests  
# UA:用户代理,表示浏览器基本身份信息
headers = {
    'User-Agent': 。。。
}
# 请求地址
url = f'https://movie.douban.com/top250'
# 发送请求 不加header,requests会自动生成一个UA,但豆瓣有反爬那个UA的话是不能访问的,所以我们需要伪装浏览器去访问,所以需要上面的header
response = requests.get(url=url, headers=hearders)

在这里插入图片描述

这样可以产看自己浏览器的UA。3没有东西就刷新一下页面。

BeautifulSoup

概述

用于html信息的分析,需要第三方库bs4

网页信息分析

我是用的是Edge浏览器
豆瓣电影top250
打开上面的页面
用快捷键F12 或者 在页面右键鼠标点击下拉菜单里检测就可以打开开发者界面
在这里插入图片描述

可以通过标红的地方更改显示位置.
在这里插入图片描述

在元素界面下,点击圈红的地方就可以在页面中选择一个元素进行检查.
我们需要电影名称就把鼠标移动到电影名处
在这里插入图片描述

发现电影名在span里,同时它的class是title
同样的方法可以发现评分也在span,但property是v:average

代码

# 导入BeautifulSoup库
from bs4 import BeautifulSoup
# 提取html文本
html = response.text
# 指定用html解析器
soup = BeautifulSoup(html, 'html.parser')
# 取到所有标题
all_titles = soup.findAll('span', attrs={'class': 'title'})

打印all_titles会发现有带/的副标题,但我们要的只是主标题.所以添加下面一段话.

for title in all_titles:
    title_s = title.string
    if '/' not in title_s:
        print(title_s)

list

概要

我用列表是为了把电影名和电影评分信息存储在列表里,最后好用prettytable来显示.

参考

python列表

代码

# 创建空列表
title_string = []
# 给列表添加元素
title_string.append(title_s)

prettytable

# 导入prettytable重命名为pt
import prettytable as pt

# 实例化一个对象
tb = pt.PrettyTable()
tb.field_names = [
        '序号',
        '片名',
        '评分',
]
....

for num in range(0, 250, 1):
    tb.add_row([num+1, title_string[num], average_string[num]])

print(tb)

完整代码

import requests
from bs4 import BeautifulSoup
# 导入prettytable重命名为pt
import prettytable as pt

# 实例化一个对象
tb = pt.PrettyTable()
tb.field_names = [
        '序号',
        '片名',
        '评分',
]

headers = {
    'User-Agent': '。。。'  #产看浏览器UA复制到这
}
title_string = []
average_string = []
for start_num in range(0, 250, 25):
    url = f'https://movie.douban.com/top250?start={start_num}'

    response = requests.get(url=url, headers=headers)
    # print(response)
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    # print(soup)
    all_titles = soup.findAll('span', attrs={'class': 'title'})

    for title in all_titles:
        title_s = title.string
        if '/' not in title_s:
            title_string.append(title_s)
            # print(title.string)
            # print(num, title_string, sep='--')

    all_average = soup.findAll('span', attrs={'property': 'v:average'})
    for average in all_average:
        average_string.append(average.string)

# print(title_string)
# print(average_string)
for num in range(0, 250, 1):
    tb.add_row([num+1, title_string[num], average_string[num]])
print(tb)
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值