Python网络爬虫详解:实战豆瓣电影信息采集

news2024/11/14 2:54:23

文章目录

  • 前言
  • 一、爬虫是什么?
  • 二、常用库及其作用
    • 1.Requests
    • 2.BeautifulSoup
    • 3. lxml
    • 4. Scrapy
    • 5. Selenium
    • 6. PyQuery
    • 7. Pandas
    • 8. JSON
    • 9. Time
  • 三、实现步骤
    • 步骤一:环境准备
    • 步骤二:数据采集
    • 步骤三:数据处理
    • 步骤四:数据存储
  • 总结


前言

随着互联网的迅猛发展和数据分析需求的不断增加,网络爬虫成为了一项重要的技术。通过网络爬虫,用户可以自动化地从互联网获取大量数据,从而实现各种数据分析、市场调查等目标。本文将介绍什么是爬虫,以及在爬虫开发中经常用到的一些Python库和其作用,并展示一个简单的爬虫实现步骤。

在这里插入图片描述


一、爬虫是什么?

网络爬虫,又称网页蜘蛛、网络机器人,是一种按照一定规则自动抓取互联网信息的程序。它通过模拟浏览器的行为发送HTTP请求,获取网页内容,然后对获取到的HTML进行解析,从中提取出需要的数据。爬虫广泛应用于搜索引擎、数据分析、市场调查等领域,帮助人们从海量的互联网信息中提取有用的数据。

爬虫的工作流程:

  1. 发送请求:爬虫通过HTTP请求获取目标网页的HTML内容。这通常使用requests库来完成。
  2. 解析内容:获取到HTML内容后,爬虫使用BeautifulSoup等库来解析网页,提取所需的数据。
  3. 数据处理:对提取的数据进行处理和清洗,使其结构化和规范化。
  4. 数据存储:将处理后的数据存储到本地文件或数据库中,以便后续分析和使用。

二、常用库及其作用

在进行网络爬虫开发时,Python提供了许多功能强大的库,帮助开发者轻松获取、解析和存储数据。以下是一些常用的库及其作用:

1.Requests

  • 作用:用于发送HTTP请求,获取网页内容。Requests库简化了HTTP请求的操作,使得爬虫可以方便地获取网页数据。
  • 示例:
import requests
response = requests.get('https://www.douban.com/')
print(response.text)

2.BeautifulSoup

  • 作用:用于解析HTML和XML文档,从中提取所需的数据。BeautifulSoup提供了简洁的API,便于搜索、遍历和修改解析树。
  • 示例:
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.title)

3. lxml

  • 作用:一个高效的XML和HTML解析库,支持XPath和XSLT。lxml比BeautifulSoup更快,更适合处理大型文档。
  • 示例:
from lxml import etree
tree = etree.HTML(response.text)
title = tree.xpath('//title/text()')
print(title)

4. Scrapy

  • 作用:一个强大的爬虫框架,提供了丰富的功能,包括页面抓取、数据提取、存储和爬虫管理。Scrapy适用于需要抓取大量网页和处理复杂逻辑的项目。
  • 示例:
import scrapy
class MySpider(scrapy.Spider):
    name = 'my_spider'
    start_urls = ['https://www.douban.com/']
    def parse(self, response):
        title = response.xpath('//title/text()').get()
        print(title)

5. Selenium

  • 作用:一个自动化测试工具,可以控制浏览器进行各种操作,适用于需要处理动态加载内容的网页。Selenium可以模拟用户操作,如点击、输入等。
  • 示例:
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.douban.com/')
print(driver.title)
driver.quit()

6. PyQuery

  • 作用:一个类似jQuery的解析库,可以使用jQuery语法选择和操作HTML元素。PyQuery非常直观,适合习惯jQuery语法的开发者。
  • 示例:
from pyquery import PyQuery as pq
doc = pq(response.text)
title = doc('title').text()
print(title)

7. Pandas

  • 作用:一个数据处理和分析库,适合用来处理结构化数据。Pandas可以方便地将数据存储到CSV、Excel等格式,适合后续的数据分析和处理。
  • 示例:
import pandas as pd
data = [{'name': 'Inception', 'year': 2010}, {'name': 'Interstellar', 'year': 2014}]
df = pd.DataFrame(data)
df.to_csv('movies.csv', index=False)

8. JSON

  • 作用:用于处理JSON数据格式,可以将Python对象转换为JSON格式,或将JSON字符串解析为Python对象。
  • 示例:
import json
data = {'name': 'Inception', 'year': 2010}
json_data = json.dumps(data)
print(json_data)

9. Time

  • 作用:用于处理时间相关的操作。在爬虫中常用于引入随机延迟,模拟人类行为,避免被目标网站屏蔽。
  • 示例:
import time
import random
time.sleep(random.randint(1, 3))

通过这些库的配合使用,可以方便地实现各种爬虫功能,自动化地从互联网获取所需的信息,并对数据进行处理和存储。


三、实现步骤

步骤一:环境准备

下载requests库和beautifulsoup4库,requests库的本质就是封装了urllib3模块,它可以模拟浏览器的请求,编写过程更接近正常URL的访问过程。一般通过导入BeautifulSoup类来解析网页内容,以下是下载依赖的命令:

pip install requests beautifulsoup4

步骤二:数据采集

导入 requests 库:import requests,设置目标URL和请求头信息。设置UA进行简单伪装,将目标URL和请求头信息传入到requests库中的get()方法,使用 requests.get() 方法发送请求,获取豆瓣电影排行榜的HTML内容
在这里插入图片描述

步骤三:数据处理

导入 BeautifulSoup 库,解析获取的HTML内容:from bs4 import BeautifulSoup,创建BeautifulSoup对象,初始化一个空列表 movies 来存储电影信息。
在这里插入图片描述
遍历所有包含电影信息的 div 标签(类名为 pl2),提取电影名称、上映时间和主演信息。

通过方法选择器获取所有类名为pl2的div标签,再从中找到a标签第一个返回的结果,获取到电影名称,再找到里面类名为pl的第一个p标签的信息,获取到该信息里的第一个内容为上映时间,第三个内容之后的则为主演信息,使用字符串操作对提取的数据进行处理,并存储到字典中。将每部电影的信息添加到 movies 列表中。
引入 time 模块添加1到3秒的随机延迟,模拟人类行为。

在这里插入图片描述

步骤四:数据存储

导入 json 库:import json,将提取的信息存储在字典中,并将字典转换为JSON格式文件保存到本地。
在这里插入图片描述

最后我们运行该爬虫文件,可以看到数据已保存至本地文件 movies.json
在这里插入图片描述

总结

通过本篇博客,我们学习了如何使用Python进行网络爬虫。首先,我们介绍了爬虫的基本概念和工作流程,然后详细介绍了常用的爬虫库及其作用。通过一个具体的示例演示了从环境准备、数据采集、数据处理到数据存储的全过程。这个案例展示了Python在网络爬虫领域的强大应用和灵活性。希望本文能够帮助读者更好地了解Python在网络爬虫方面的使用,如果有任何疑问或者建议,欢迎留言讨论🌹

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

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

相关文章

【数据分享】2008-2022年我国省市县三级的逐日NO2数据(excel\shp格式)

空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000-2022年的省市县三级的逐日PM2.5数据、2013-2022年的省市县三级的逐日CO数据和2013-2022年的省市县三级的逐日SO2数据(均可查看之前的文章获悉详情)! 本次…

前端 SSE 长连接

使用 const options {withCredentials: true, // 默认 false}const eventSource new EventSource(/api, options);eventSource.addEventListener(open, () > {});eventSource.onmessage (event) > {}; // 或addEventListener(message,callback)eventSource.addEvent…

BGP选路之AS-PATH

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定去往该目标网络的最优BGP路由。首先要比较的属性是 Preferred Value,然后是Local Preference,再次是路由生成方式&a…

Ansible的脚本-----playbook剧本【上】

目录 1.playbook剧本组成 2.playbook剧本实战演练 2.1 实战演练一:给被管理主机安装httpd服务 2.2 实战演练二:定义、引用变量 2.3 实战演练三:指定远程主机sudo切换用户 2.4 实战演练四:when条件判断 2.5 实战演练五&…

Docker Compose V2 安装 ClickHouse v20.6.8.5 经验分享

前言 ClickHouse 是一款开源的分布式列式数据库管理系统,专门设计用于高性能的大数据分析和查询。 目前项目中用到的一个场景是将mongo的数据同步到clickhouse,使用clickhouse做报表,后续也将分享同步和使用方案 使用 Docker Compose 部署单机版,小项目和自己测试够用了,生…

【C#】visual studio打包winForm(依赖DLL)为安装程序exe

0.简介 IDE:VS2022 平台:C# .NetFramework4.7 WinForm界面 有GDAL、EEplus库的依赖,所以在其他未安装环境的电脑中功能无法使用。 1. 安装 1.1 运行文件 在VS扩展中选择管理扩展,Microsoft Visual Studio Installer Projects …

C#测试控制台程序调用Quartz.NET的基本用法

Quartz.Net是常用的任务调用框架之一,既能在客户端程序中使用,也支持在网页程序后台调用。本文结合参考文献4中的示例代码学习其在控制台程序中的基本用法。   VS2022新建控制台项目,在Nuget包管理器中搜索并安装Quartz包,如下所…

51单片机嵌入式开发:18、STC89C52RC嵌入式DS1302实时时钟实验及数码管显示

STC89C52RC嵌入式DS1302实时时钟实验及数码管显示 STC89C52RC嵌入式DS1302实时时钟实验及数码管显示1 概述1.1 DS1302简介1.2 DS1302功能和特点1.3 DS1302工作原理1.4 DS1302应用领域 2 DS1302设计原理2.1 引脚说明2.2 寄存器说明及使用(1)命令cmd字节说…

Redis的缓存问题:缓存穿透、缓存击穿和缓存雪崩

目录 一、缓存穿透 1、问题描述 2、解决方案 二、缓存击穿 1、问题描述 2、解决方案 三、缓存雪崩 1、问题描述 2、解决方案 3、雪崩案例 一、缓存穿透 1、问题描述 缓存穿透指的是⼤量请求的 key根本不存在于缓存中,每次针对此key的请求从缓存获取不到…

报红:找不到名称ref ts(2304)、‘ref‘ is not defined. eslint(no-undef)

接上篇 在上篇介绍了使用 unplugin-auto-import 和 unplugin-vue-components 配置完成后,项目可以正常运行,并且页面也正常显示,但vscode里就是报红 这个报红可能是由于 ts 发出的,也可能是由于 eslint 发出的 具体可以用鼠标…

如何使用 API list 极狐GitLab 群组中的镜像仓库?

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab :https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署…

某数据泄露防护(DLP)系统NetSecConfigAjax接口SQL注入漏洞复现 [附POC]

文章目录 某数据泄露防护(DLP)系统NetSecConfigAjax接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现某数据泄露防护(DLP)系统NetSecConfigAjax接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请…

云计算实训13——DNS域名解析、ntp时间服务器配置、主从DNS配置、多区域DNS搭建

一、DNS域名解析 1.正向解析 将域名解析为IP地址 DNS正向解析核心配置 (1)安装bind [rootdns ~]# yum -y install bind (2)编辑配置文件 编辑named.conf文件,限定访问权限 [rootdns ~]# vim /etc/named.conf 编辑named.rfc文件,指定要访问的域名 [ro…

大语言模型推理优化--键值缓存--Key-value Cache

文章目录 一、生成式预训练语言模型 GPT 模型结构二、FastServe 框架三、Key-value Cache1.大模型推理的冗余计算2.Self Attention3.KV Cache 一、生成式预训练语言模型 GPT 模型结构 目前,深度神经网络推理服务系统已经有一些工作针对生成式预训练语言模型 GPT 的独…

【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(上)

【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(上) 大家好 我是寸铁👊 【Gin】架构的精妙编织:Gin框架中组合模式的革新实践与技术深度解析(上)✨ 喜欢的小伙伴可以点点关注 💝 前言 本次文章分为上下两部分…

QT--线程

一、线程QThread QThread 类提供不依赖平台的管理线程的方法,如果要设计多线程程序,一般是从 QThread继承定义一个线程类,在自定义线程类里进行任务处理。qt拥有一个GUI线程,该线程阻塞式监控窗体,来自任何用户的操作都会被gui捕获到,并处理…

Umi-OCR:功能强大且易于使用的本地照片识别软件

Umi-OCR是一款开源且免费的离线OCR(光学字符识别)软件,可让您轻松从照片中提取文本。它支持多种语言,并具有许多其他功能使其成为照片识别任务的绝佳选择。 Umi-OCR的优势 离线操作: Umi-OCR无需互联网连接即可工作&…

Python实现websocket连接服务器报rejected WebSocket connection: HTTP 401

1. websockets报HTTP 401解决办法 代码如下: #!/usr/bin/env python import asyncio import websockets import requestsuri ws://192.168.20.167/websocket msg {"type":6,"param":{"businessType":3,"cmd":1,"f…

mysql 数据库空间统计sql

mysql 数据库空间统计 文章目录 mysql 数据库空间统计说明一、数据库存储代码二、查询某个数据库的所有表的 代码总结 说明 INFORMATION_SCHEMA Table Reference 表参考 information_schema是‌MySQL中的一个特殊数据库,它存储了关于所有其他数据库的元数据信息。…

20240724-然后用idea创建一个Java项目/配置maven环境/本地仓储配置

1.创建一个java项目 (1)点击页面的create project,然后next (2)不勾选,继续next (3)选择新项目名称,新项目路径,然后Finsh,在新打开的页面选择…