使用网络爬虫爬取豆瓣电影网站的数据

在这里插入图片描述


👨‍💻个人主页@开发者-曼亿点

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 曼亿点 原创

👨‍💻 收录于专栏机器学习

🅰

请添加图片描述



前言

   在当今这个数据大爆炸的信息时代,海量的互联网数据蕴含着巨大的价值,用户如何自动高效地从互联网中获取感兴趣的信息是一个亟待解决的问题。在这样的环境和需求的影响下,网络爬虫应运而生,它为互联网数据的采集提供了新的方法。本项目将介绍使用Python编写网络爬虫的方法。
   豆瓣用户可对豆瓣电影中“看过”的电影进行“很差”到“力荐”评价,豆瓣会根据每部影片看过的人数及该影片所得的评价等综合数据,通过算法分析产生豆瓣电影Top250。本任务将带领大家编写Python程序,利用requests库,爬取豆瓣电影Top250网站的数据。


🎶 一、网络爬虫概述


  网络爬虫又称为网络蜘蛛或网络机器人,是一个用来实现自动采集网络数据的程序。如果将互联网比作一张蜘蛛网,数据便存放于蜘蛛网的各个节点,而网络爬虫就可以比作在网上爬来爬去的蜘蛛,沿着网络抓取数据。
  网络爬虫不仅能为搜索引擎采集网络信息,还可以定向采集某些网站中的特定信息,如学术网站的论文、团购网站的价格及点评、各种电商平台的商品信息、招聘信息、租房信息、微博评论等。

网络爬虫是一个自动化的程序,它的基本工作流程如图所示
在这里插入图片描述

网络爬虫的基本工作流程可分为爬取网页、解析网页和存储数据3个步骤。
  (1)爬取网页:发送构造的HTTP请求,获取包含所需数据的HTTP响应(即网页源代码)。Python提供的爬取网页的库有urllib、requests、selenium等。
  (2)解析网页:根据网页结构,分析HTTP响应的内容,从中提取想要的数据。Python提供的解析网页的库有re(正则表达式)、lxml、beautifulsoup4等。
  (3)存储数据:将提取的数据保存起来以便后续使用。保存数据的方式有很多种,可以将其简单保存到JSON、CSV或TXT文件中,也可以保存到数据库中,如MySQL和MongoDB等。


🎶 二、requests库


  Python的标准库urllib提供了大部分HTTP功能,但使用起来较烦琐。而requests库是对urllib库的进一步封装,使用更加便捷。它的最大优点是,程序编写过程更接近正常的URL访问过程。但requests库不是Python内置的标准库,使用前需要安装。

【温馨提示】:统一资源定位符(uniform resource locator,URL)是对可以从互联网上得到的资源位置和访问方法的一种简洁表示,是互联网上标准资源的地址。

  requests库提供了很多功能特性,几乎涵盖了所有Web服务的需求,包括URL获取、HTTP长连接和连接缓存、HTTP会话、浏览器式的SSL验证、身份认证、Cookie会话、文件分块上传、流下载、HTTP(S)代理功能、连接超时处理等。有关requests库的更多介绍可访问http://docs.python-requests.org/。下面着重介绍使用requests库实现发送HTTP请求和获取HTTP响应的方法。

1.发送HTTP请求

  requests库提供了几乎所有的HTTP请求方法,包括GET、POST、HEAD、PUT、DELETE、CONNECT、OPTIONS和TRACE等。其中,最常用的是GET方法和POST方法。平时打开网站一般使用的是GET方法,也就是请求页面,该方法通过get()函数实现,其函数原型如下。

get(url, params=None, **kwargs)

(1)url:请求的URL,这是必传参数,其他都是可选参数。
(2)params:字典或字节序列,作为参数增加到url中。
(3)**kwargs:控制访问的参数,如headers、cookies、timeout和proxies等。

2.获取HTTP响应的内容

   使用请求方法发送HTTP请求后,返回一个Response类型的对象,其提供的属性和方法如表所示。
在这里插入图片描述

【例11】 爬取在豆瓣网站中搜索“Python”的内容,输出响应的内容。
【问题分析】 在爬取网页的内容前,可以先查看和分析网页的HTTP请求和响应,获取构造请求的信息和响应的内容。使用Google Chrome浏览器打开豆瓣网站搜索“Python”,查看HTTP请求和响应的过程如下。
打开Google Chrome浏览器,访问https://www.douban.com/。右击页面空白处,在弹出的快捷菜单中选择“检查”选项,打开浏览器的开发者工具窗口,然后选择“Network”选项。在打开的豆瓣网站中搜索“Python”关键词,即可在开发者工具窗口中显示请求记录(见图),其中每一条记录都代表一次发送请求和接收响应的过程。
在这里插入图片描述

在记录列表中,选择“search?q=python”选项,然后在其右侧打开的界面中选“Headers”选项,即可显示HTTP请求和响应的详细信息,如图所示。
在这里插入图片描述
   完成本案例,可首先定义字符串url,赋值为https://www.douban.com/search,定义字典paramsvalue,赋值为{‘q’: ‘Python’};然后使用get()函数发送HTTP请求,参数为url和paramsvalue,输出响应状态码和请求头;然后定义字典headersvalue设置User-Agent信息,再使用get()函数发送HTTP请求,参数为url、paramsvalue和headersvalue,并输出响应状态码、请求头和文本类型的响应内容。
【运行代码】

import requests					#导入requests库
paramsvalue = {'q': 'Python'}			#定义字典
#将paramsvalue作为参数增加到url中并发送请求,将响应赋值给r
r = requests.get('https://www.douban.com/search',
                 params=paramsvalue)
print(r.status_code)				#输出响应状态码
print(r.request.headers)				#输出请求头
#定义请求头信息
headersvalue = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',
}
#发送HTTP请求,并将响应赋值给r
r = requests.get('https://www.douban.com/search',
                  params=paramsvalue, headers=headersvalue)
print(r.status_code)				#输出响应状态码
print(r.request.headers)				#输出请求头
print(r.text)					#输出文本类型的响应内容

【运行结果】 程序运行结果如图所示
在这里插入图片描述

从图可以看出,例1第一次发送HTTP请求时,请求头中的User_Agent信息为Python的requests库的版本信息,表示爬虫程序发送该请求,且响应状态码是418,表示禁止爬虫程序爬取该网站;而第二次设置为浏览器信息,响应状态码为200,表示伪装成浏览器后成功爬取网站。所以,设置请求头参数是应对反爬虫机制的一种有效方法。

使用Google Chrome浏览器打开豆瓣电影Top250网站(网址https://movie.douban.com/top250),可以看到每一页只显示25个电影,如果想要获取所有的电影(250个),需要获取总共10页的内容。10个网页的地址如下。
https://movie.douban.com/top250
https://movie.douban.com/top250?start=25&filter=
https://movie.douban.com/top250?start=50&filter=
...
https://movie.douban.com/top250?start=220&filter=
https://movie.douban.com/top250?start=225&filter=
通过分析发现,每翻一页,网页地址中的start参数会加上25。
完成本任务,须循环10次。在循环中,首先定义url字符串;然后发送HTTP请求,并输出响应状态码和请求的URL;最后将响应内容保存到TXT文件中。

结束语🥇

以上就是机器学习
持续更新机器学习教程,欢迎大家订阅系列专栏🔥机器学习
你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述

Python爬虫抓取豆瓣电影数据通常涉及以下几个步骤: 1. **选择工具**:Python中有许多库可用于网络爬虫,如requests用于发送HTTP请求,BeautifulSoup或PyQuery用于解析HTML文档,pandas或json处理数据。 2. **获取网页源码**:首先,通过requests库向豆瓣电影页面发送GET请求,获取到HTML源代码。 ```python import requests response = requests.get('https://movie.douban.com/top250') html_content = response.text ``` 3. **解析HTML**:使用BeautifulSoup等库解析HTML内容,提取所需的信息,如电影标题、评分、导演、演员等。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'lxml') movies = soup.select('.item') # 选取包含电影信息的元素 ``` 4. **提取数据**:遍历解析后的DOM结构,提取每个电影的属性并存储到字典或列表中。 ```python data = [] for movie in movies: title = movie.find('span', class_='title').text rating = float(movie.find('span', class_='rating_num').text) director = movie.find('div', class_='attrs').find('span', itemprop='director').text ... (其他属性提取类似) data.append({ 'title': title, 'rating': rating, 'director': director, ... }) ``` 5. **保存数据**:将爬取到的数据存入CSV文件、数据库或是JSON文件,以便后续分析。 ```python import csv with open('douban_movies.csv', mode='w', newline='', encoding='utf-8') as file: writer = csv.DictWriter(file, fieldnames=data[0].keys()) writer.writeheader() writer.writerows(data) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曼亿点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值