首页 > 其他分享 >爬虫实例——爬取豆瓣网 top250 电影的信息

爬虫实例——爬取豆瓣网 top250 电影的信息

时间:2022-10-16 20:31:15浏览次数:74  
标签:class 爬虫 li 爬取 内容 top250 find append

本节通过一个具体的实例来看下编写爬虫的具体过程。以爬取豆瓣网 top250 电影的信息为例,top250 电影的网址为:​​https://movie.douban.com/top250​​​。在浏览器的地址栏里输入 ​​https://movie.douban.com/top250​​,我们会看到如下内容:

爬虫实例——爬取豆瓣网 top250 电影的信息_地址栏

对于每一部电影需要爬取的内容如下图所示:

爬虫实例——爬取豆瓣网 top250 电影的信息_xml_02

如上图所示,爬取的内容包括电影排名、电影名称、电影评分、电影属于哪个国家、电影类型、电影的上映时间以及电影的导演、主演。了解了要爬取哪些内容之后,接下来需要知道这些内容对应的 html 内容。

爬虫实例——爬取豆瓣网 top250 电影的信息_html_03

知道了对应的 html 内容之后,接下来就是解析 html,获取我们想要的内容。下面我们就逐步介绍爬取的过程:

1.获取 html

爬虫实例——爬取豆瓣网 top250 电影的信息_地址栏_04

如上图所示,由于每页只展示 25 个电影的信息,要想获取所有电影的信息,需要通过一个循环来获取全部 10 页的内容。

1.1 导入所需的第三方库

import requests
from bs4 import BeautifulSoup
import time
import csv

1.2 发送请求

1.2.1 设置 headers

由于豆瓣网会有反扒的机制,所以在请求网页的时候,需要设置headers。headers 的内容如下:

headers = {
'User-Agent': ******,
'Cookie': ******
}

在实际运行时,需要将 ** 改成真实的 User-Agent 和 Cookie。

1.2.2 生成 url

第一页的 url 为:​​https://movie.douban.com/top250?start=0&filter=​​。第二页的 url 为:​​https://movie.douban.com/top250?start=25&filter=​​。第三页的 url 为:​​https://movie.douban.com/top250?start=50&filter=​​。从上面三个 url 的组成可以看出,只有 start 后面的数字在变,其他的都不变。我们可以根据这个规律来获取所有的 url。

1.2.3 发送请求获取响应

for i in range(10):
response = requests.get(
'https://movie.douban.com/top250?'+'start='+str(25*i)+'&filter=', headers=headers)

2.解析 html

2.1 响应解析

    soup = BeautifulSoup(response.text, 'lxml')
ol = soup.ol
all_li = ol.find_all('li')
for li in all_li:
rank = li.find('em', class_="").string
title = li.find('span', class_="title").string
rating = li.find('span', class_="rating_num").string
info = li.find('div', class_="bd").p.get_text().strip()
country = info.split('/')[-2]
genre = info.split('/')[-1]
release_time = info.split('\n')[1].split('/')[0].replace(" ", "")
director_actor = li.find('div', class_="bd").p.next_element.replace(
"\n", "").replace(" ", "")

ranks.append(rank)
titles.append(title)
ratings.append(rating)
countrys.append(country)
genres.append(genre)
release_times.append(release_time)
director_actors.append(director_actor)

由上面的 html 内容可以看到,每部电影的信息处于​​<li></li>​​标签内,而所有的​​<li></li>​​标签又位于​​<ol></ol>​​标签内。于是,首先获取 ol 标签的内容,然后再获取所有的 li 标签的内容。获取到所有的 li 标签之后,对每个 li 标签进行遍历,获取我们想要的内容。在所有的内容获取完成后,将内容加入到相应的存储列表中。

3.存储内容

在获取我们想要的内容之后,将内容存储到 csv 文件。代码如下:

with open('top250.csv', 'w') as file:
writer = csv.writer(file, delimiter=',')

writer.writerow(["排名", "名称", "评分", "国家", "类型", "上映时间", "导演&主演"])

for i in range(250):
writer.writerow([
ranks[i],
titles[i],
ratings[i],
countrys[i],
genres[i],
release_times[i],
director_actors[i]
])

4.完整代码

综合上面每一步的代码之后,便可以得到完整的代码:

import requests
from bs4 import BeautifulSoup
import time
import csv

headers = {
'User-Agent': ******,
'Cookie': ******
}

ranks = []
titles = []
ratings = []
inqs = []
countrys = []
genres = []
release_times = []
director_actors = []

for i in range(10):
response = requests.get(
'https://movie.douban.com/top250?'+'start='+str(25*i)+'&filter=', headers=headers)

soup = BeautifulSoup(response.text, 'lxml')
ol = soup.ol
all_li = ol.find_all('li')
for li in all_li:
rank = li.find('em', class_="").string
title = li.find('span', class_="title").string
rating = li.find('span', class_="rating_num").string
info = li.find('div', class_="bd").p.get_text().strip()
country = info.split('/')[-2]
genre = info.split('/')[-1]
release_time = info.split('\n')[1].split('/')[0].replace(" ", "")
director_actor = li.find('div', class_="bd").p.next_element.replace(
"\n", "").replace(" ", "")

ranks.append(rank)
titles.append(title)
ratings.append(rating)
countrys.append(country)
genres.append(genre)
release_times.append(release_time)
director_actors.append(director_actor)

time.sleep(3)


with open('top250.csv', 'w') as file:
writer = csv.writer(file, delimiter=',')

writer.writerow(["排名", "名称", "评分", "国家", "类型", "上映时间", "导演&主演"])

for i in range(250):
writer.writerow([
ranks[i],
titles[i],
ratings[i],
countrys[i],
genres[i],
release_times[i],
director_actors[i]
])

5.结果

将获取到的内容存储到 csv 文件中。csv 文件的部分内容如下图所示:

爬虫实例——爬取豆瓣网 top250 电影的信息_html_05

这样我们便完成了豆瓣 top250 电影信息的爬取。

标签:class,爬虫,li,爬取,内容,top250,find,append
From: https://blog.51cto.com/u_15641375/5760528

相关文章

  • python学习——爬取数据到excel
    python的学习直接使用网页爬虫,将内容爬取到excel,也是为之后的大数据学习做铺垫。下面的代码是我爬取的豆瓣电影Top250的电影基本信息,当然,也可以爬取到数据库中#-*-cod......
  • 爬取spa网站与ssr网站的区别
    前言在练习爬虫的时候不清楚spa与ssr网站的区别,都使用bs4直接解析网页的html,结果ssr网站输出结果,spa网站却没有输出结果,特此记录ssr网站:https://ssr1.scrape.center/page......
  • 练习爬虫的几个网站
    https://scrape.center/https://www.zhihu.com/question/36132174/answer/70798699......
  • 使用python爬虫爬取数据集保存到csv或者excel中
    准备下载库在编写代码时需要使用的python库要提前下载pipinstallbeautifulsoup4pipinstallopenpyxlpipinstallrequests相关库的文档openpyxl-读/写Excel......
  • Python简单爬虫
    对大佬的有些修改,用大佬的编码转换那里老是出问题这个亲测可以#-*-coding:utf-8-*-importrequestsimportparselurl=""#小说网站response=requests.get(url)respo......
  • 强大的爬虫框架 Scrapy
    本节来介绍一个强大的爬虫框架Scrapy。Scrapy是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各......
  • 爬虫的基本原理
    一、爬虫的基本原理网络爬虫的价值其实就是数据的价值,在互联网社会中,数据是无价之宝,一切皆为数据,谁拥有了大量有用的数据,谁就拥有了决策的主动权。爬虫聚合站点https://......
  • 一个优雅的异步爬虫基类
    这是我编写的一个异爬虫基类,有以下几点优点使用接口继承的思想继承Crawler类后,必须实现parse和handle方法,否则程序报错,虽然Python没有接口的特性,但是使用raise方法抛出......
  • PHP爬取网站内容
    最近公司需要存在阿里云对象存储(oss)里的视频文件,而且需要18套课程的视频源文件,这周就要,我想了一下这要是一个一个找那可就麻烦了。要想想一套课程有n个章节,每个章节有n个视......
  • 爬取旅游景点评论数据,并可视化
    对于数据分析师来说,数据获取通常有两种方式,一种是直接从系统本地获取数据,另一种是爬取网页上的数据,爬虫从网页爬取数据需要几步?总结下来,Python爬取网页数据需要发起请求、获......