python爬虫概述及简单实践:获取豆瓣电影排行榜

目录

前言

Python爬虫概述

简单实践 - 获取豆瓣电影排行榜

1. 分析目标网页

2. 获取页面内容

3. 解析页面

4. 数据存储

5. 使用代理IP

总结


前言

Python爬虫是指通过程序自动化地对互联网上的信息进行抓取和分析的一种技术。Python作为一门易于学习且强大的编程语言,因其拥有丰富的第三方库和强大的数据处理能力,使得它成为了爬虫开发中的最佳选择。本文将简单介绍Python爬虫的概述,并提供一个简单的实践案例,同时会使用代理IP来提高爬虫的效率。

Python爬虫概述

Python爬虫由三个部分组成:网页下载、网页解析、数据存储。

  • 网页下载:从互联网上获取需要的数据,通常使用requests库或urllib库来实现
  • 网页解析:将下载下来的网页进行处理,提取出需要的信息,常见的解析库有BeautifulSoup和xpath等
  • 数据存储:将获取到的数据存储到文件、数据库等中,通常使用sqlite、MySQL等数据库或者csv、json等文件格式

简单实践 - 获取豆瓣电影排行榜

下面将通过一个简单的实践来讲解Python爬虫的应用。

1. 分析目标网页

首先打开浏览器,访问[豆瓣电影排行榜](https://movie.douban.com/chart),观察页面,我们会发现电影排行榜的信息都在HTML的table标签中,并且每个电影信息都是一个tr标签。每个电影信息包括电影名称、评分、导演、演员、链接等等。因此,我们需要使用Python程序来获取这些电影的信息。

2. 获取页面内容

网页下载是爬虫的第一步,我们使用Python的requests库来获取目标网页的HTML代码。代码如下:

import requestsurl = 'https://movie.douban.com/chart'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
headers = {'User-Agent': user_agent}r = requests.get(url, headers=headers)
if r.status_code == 200:html = r.text

这里我们设置了请求头,模拟浏览器的请求,以免被目标网站认为是爬虫而禁止访问。

3. 解析页面

我们使用Python的BeautifulSoup库来解析页面。该库提供了一种非常方便的方式来操作HTML和XML文档,能够方便地获取特定元素、属性和文本等信息。我们首先使用lxml解析器将HTML代码转换成BeautifulSoup对象,然后根据标签和属性的CSS选择器来遍历HTML文档并提取需要的内容。代码如下:

from bs4 import BeautifulSoupsoup = BeautifulSoup(html, features="lxml")
table = soup.find("table", {"class": "ranking-list"})
tbody = table.find("tbody")
trs = tbody.findAll("tr")movies = []
for tr in trs:td_name = tr.find("td", {"class": "titleColumn"})name = td_name.find("a").textrating = tr.find("span", {"class": "rating_num"}).textdirector = td_name.find("div", {"class": "bd"}).find_all("p")[0].textactors = td_name.find("div", {"class": "bd"}).find_all("p")[1].textlink = td_name.find("a")["href"]movie = {"name": name, "rating": rating, "director": director, "actors": actors, "link": link}movies.append(movie)for movie in movies:print(movie)

这里我们使用find()方法来查找特定的标签和属性,并使用text属性来获取标签中的文本。需要注意的是,如果标签不存在或者不存在某个属性,那么会返回None,因此需要进行一定的判断和处理。

4. 数据存储

最后,我们将获取到的电影信息保存到CSV文件中。代码如下:

import csvfilename = 'movies.csv'
with open(filename, 'w', newline='', encoding='utf-8') as f:writer = csv.writer(f)writer.writerow(['电影名', '评分', '导演', '演员', '链接'])for movie in movies:writer.writerow([movie['name'], movie['rating'], movie['director'], movie['actors'], movie['link']])

使用csv库的writerow()方法将电影信息逐行写入CSV文件中。

5. 使用代理IP

有些网站会对爬虫程序进行限制,例如设置访问频率限制、封禁IP等操作。因此,我们需要使用代理IP来解决这一问题。代理IP可以让我们通过代理服务器来访问目标网站,从而提高访问速度和安全性。

我们可以通过一些免费的代理IP网站来获取代理IP,例如站大爷代理ip、开心代理等。代码如下:

import requestsurl = 'https://movie.douban.com/chart'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
headers = {'User-Agent': user_agent}proxy_url = 'https://www.zdaye.com//'
proxy_headers = {'User-Agent': user_agent}proxies = []
r = requests.get(proxy_url, headers=proxy_headers)
if r.status_code == 200:soup = BeautifulSoup(r.text, features="lxml")table = soup.find("table", {"id": "ip_list"})tbody = table.find("tbody")trs = tbody.findAll("tr")for tr in trs:tds = tr.find_all('td')if len(tds) > 6 and tds[5].text == 'HTTP':ip = tds[1].text + ':' + tds[2].textproxies.append(ip)for proxy in proxies:try:print('Using proxy:', proxy)proxy_dict = {'http': 'http://' + proxy, 'https': 'https://' + proxy}r = requests.get(url, headers=headers, proxies=proxy_dict, timeout=5)if r.status_code == 200:html = r.textbreakexcept:continue

这里我们定义一个proxies列表来保存获取到的代理IP,然后遍历该列表中的每个代理IP进行访问。如果某个代理IP无法访问,则使用下一个代理IP进行访问,直到访问到目标网页为止。需要注意的是,如果代理IP无法使用或者响应时间过长,需要考虑使用其他IP或者增加超时时间。

总结

Python爬虫是一种非常有用的技术,通过Python程序自动化地获取互联网上的数据,为我们带来了许多便利。在实践中,我们需要注意遵守法律法规和爬虫道德规范,以避免产生不良后果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/150436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云服务器网络掉包问题分析及解决方案

在互联网领域拥有先进的基础设施和技术,其服务器网络一直以来都备受关注。近期有用户反映云服务器网络掉包问题严重,给用户的网络体验带来了很大的困扰。 我们需要了解什么是网络掉包。网络掉包是指在数据传输过程中,由于网络拥堵、路由不稳…

LabVIEW关于USRPRIO的示例代码

LabVIEW关于USRPRIO的示例代码 USRPRIO 通常以两种方式使用: 1 基于 FPGA 的编程 对于希望修改USRP上的底层FPGA代码以添加自定义DSP模块的应用,请使用USRP示例项目。它可作为构建 USRP RIO 流式处理应用程序的起点,可从“创建项目”对话框…

项目资讯丨轻空间中标连云港市首座“多功能声学综合馆”(EPC)

近日,轻空间(江苏)膜科技有限公司(以下简称“轻空间”)成功中标连云港市首座“多功能声学综合馆”项目,这标志着轻空间在新型气膜领域的创新突破技术,再次获得政府机构的高度认可,为…

vue 鼠标移入移出事件执行多次(尤其ie)

mouseover 当一个定点设备(通常指鼠标)在一个元素本身或者其子元素上移动时,mouseover 事件在该元素上触发。 mouseenter 事件在定点设备(通常指鼠标)首次移动到元素的激活区域内时,在该元素上触发。 mouse…

TypeScript 泛型及应用

TypeScript 泛型及应用 泛型(Generics)是 TypeScript 中的一项强大特性,它允许我们在定义函数、类和接口时使用类型参数,从而增加代码的灵活性和重用性。本文将介绍 TypeScript 中泛型的概念、语法以及一些常见的应用场景。 泛型…

IntelliJ IDEA 快捷键 Windows 版本

前言:常用快捷键 IntelliJ IDEA编辑器大受欢迎的原因之一是它的智能提示和丰富的快捷键,在日常开发中熟练的使用快捷键会大大提升开发的效率,本篇文章就笔者日常开发中的总结,把常用的、好用的快捷键做一个列表,方便…

Docker 中 jdk8容器里无法使用 JDK 的 jmap 等命令的问题

一、问题描述 项目部署在 CentOS 服务器上。项目偶尔会出现无响应的情况,这时理所当然要上去用 JDK 相关命令看看堆栈和GC等信息了。 进入 Java 程序所在容器:docekr-compose exec api bash,进入到 api 容器的 bash 终端。 jps 打印 Java …

水声功率放大器在声呐系统中的应用有哪些

水声功率放大器在声呐系统中扮演着重要的角色,其应用涵盖了声呐系统的多个方面。下面就让安泰电子来介绍水声功率放大器在声呐系统中的应用。 发射声波信号:声呐系统通过发射声波信号并接收其回波来探测和测量海洋中的目标物体。水声功率放大器用于放大发…

划片机新手教程:从准备工作到注意事项全解析!

随着科技的飞速发展,划片机已成为半导体行业不可或缺的一部分。对于新手来说,如何正确操作划片机显得尤为重要。以下是新手操作划片机的步骤和建议。 一、准备工作 在开始操作划片机之前,首先需要准备好以下工具和材料: 1. 划片机…

CICD 持续集成与持续交付——gitlab

部署 虚拟机最小需求:4G内存 4核cpu 下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 安装依赖性 [rootcicd1 ~]# yum install -y curl policycoreutils-python openssh-server perl[rootcicd1 ~]# yum install -y gitlab-ce-15.9.3-ce.0…

SQL常见函数整理 —— lead()向下偏移

1. 用法 是在窗口函数中使用的函数,它用于获取当前行的下一行(后一行)的某个列的值。具体来说,LEAD() 函数可用于查找任何给定行的下一行(后一行)的值,同时也可控制行数偏移量(offse…

创建自定义日志筛选器

Windows的事件查看器中的日志包含了很多信息,但是系统自带的筛选器只能筛选固定的字段和内容。有时候想根据某个事件中的用户名或者IP筛选的时候就没办法了。此时需要创建自定义筛选器来实现。 首先找到希望筛选的日志,调整成详细的XML视图。 这里面就有…

WhatsApp新营销全解:出海新个体,能不能做好WhatsApp营销

对于很多外贸跨境群体来说,很多时候是单打独斗的新个体运营模式,团队成员数量一两个人。然而,正是这一两个人的运营团队,在运营的时候不仅有四两拨千斤的能力,还能做到十八般武艺全能。 他们在运营设计和实操环节&…

手写promis(1)

目录 前言 核心功能--构造函数 核心功能--状态及原因 then方法 成功和失败回调 异步及多次调用 异步任务--核心api Promise.then: queueMicrotask: MutationObserver: setImmediate: setTimeout: 异步任务---函数封装 前言 Promise(承诺)…

FNN、DeepFM与NFM

AI上推荐 之 FNN、DeepFM与NFM(FM在深度学习中的身影重现)_ai上推荐fm-CSDN博客

GEM5 Garnet DVFS / NoC DVFS教程:ruby.clk_domain ruby.voltage_domain

简介 gem5中的 NoC部分是Garnet实现的,但是Garnet并没有单独的时钟域,而是保持ruby一致,要做noc的DVFS,便是要改ruby的 改电压 #这里只是生成一个随便变量名,存一下值。改是和频率一起的 userssaved_voltage_domain…

⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 触发器 ⑩⑥ 【MySQL】触发器详解1. 什么是触发…

java:IDEA中的Scratches and Consoles

背景 IntelliJ IDEA中的Scratches and Consoles是一种临时的文件编辑环境,用于写一些文本内容或者代码片段。 其中,Scratch files拥有完整的运行和debug功能,这些文件需要指定编程语言类型并且指定后缀。 举例:调接口 可以看到…

P9120 [春季测试 2023] 密码锁

Portal. 对于每一个拨圈,分别考虑它对答案的影响。但注意到当前拨圈的最优转动方案会对之后的拨圈转动方案产生影响,即有后效性。 后效性的产生可以通过随机化改变考虑的顺序解决。 代码实现的一点细节:先考虑出每个圈的最优转动方案&…

定时关机软件哪个好?定时关机软件大盘点

在生活和工作中,我们可以使用定时关机软件来定时关闭电脑,以实现对电脑的控制。那么,定时关机软件哪个好呢?下面我们就来了解一下。 定时关机软件的作用 定时关机软件可以帮助用户在预设的时间自动关闭电脑。这对于那些需要在特…