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

devtools/2024/9/21 13:19:21/

文章目录

  • 前言
  • 一、爬虫是什么?
  • 二、常用库及其作用
    • 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请求的操作,使得爬虫可以方便地获取网页数据。
  • 示例:
python">import requests
response = requests.get('https://www.douban.com/')
print(response.text)

2.BeautifulSoup

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

3. lxml

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

4. Scrapy

  • 作用:一个强大的爬虫框架,提供了丰富的功能,包括页面抓取、数据提取、存储和爬虫管理。Scrapy适用于需要抓取大量网页和处理复杂逻辑的项目。
  • 示例:
python">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可以模拟用户操作,如点击、输入等。
  • 示例:
python">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语法的开发者。
  • 示例:
python">from pyquery import PyQuery as pq
doc = pq(response.text)
title = doc('title').text()
print(title)

7. Pandas

  • 作用:一个数据处理和分析库,适合用来处理结构化数据。Pandas可以方便地将数据存储到CSV、Excel等格式,适合后续的数据分析和处理。
  • 示例:
python">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对象。
  • 示例:
python">import json
data = {'name': 'Inception', 'year': 2010}
json_data = json.dumps(data)
print(json_data)

9. Time

  • 作用:用于处理时间相关的操作。在爬虫中常用于引入随机延迟,模拟人类行为,避免被目标网站屏蔽。
  • 示例:
python">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.ppmy.cn/devtools/85500.html

相关文章

2023年系统架构设计师考试总结

原文链接:https://www.cnblogs.com/zhaotianff/p/17812187.html 上周六参加了2023年系统架构设计师考试,这次考试与以前有点区别,是第一次采用电子化考试,也是教材改版后的第一次考试。 说说考前准备:为了准备这次考试…

【21】两数交换

两数交换 题目描述 定义两个整数,输入两数,将两数交换后输出在控制台 输入格式 一行,两个整数,用空格隔开。 输出格式 一行两个交换后的数,用空格隔开。 输入输出样例 输入样例 789 123输出样例 123 789代码…

面试官:MQ消息已丢失,该如何处理?

消息丢失场景及处理策略 1. 生产者发送消息失败 原因:消息未能成功发送到MQ。处理策略: 消息重发:生产者应实现自动重试机制。本地存储:在发送失败时,将消息暂存至本地(数据库或文件系统)。日…

LeetCode 热题 HOT 100 (011/100)【宇宙最简单版】

【图论】No. 0200 岛屿数量 【中等】👉力扣对应题目指路 希望对你有帮助呀!!💜💜 如有更好理解的思路,欢迎大家留言补充 ~ 一起加油叭 💦 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#xf…

ObservableCollection新增数据前判断数据是否存在

public class MyDataModel {public int Id { get; set; }public string Name { get; set; }}public static void Main(){// 创建 ObservableCollectionObservableCollection<MyDataModel> myDataCollection new ObservableCollection<MyDataModel>{new MyDataMode…

SpringBoot的约车APP-计算机毕业设计源码96773

摘要 本文基于Spring Boot框架设计并实现了一款约车APP&#xff0c;旨在为用户提供便捷的出行服务。通过后端Spring Boot框架和前端交互界面的设计&#xff0c;实现了用户快速叫车、实时定位、路线规划等功能。系统结合了高效的后端处理和直观的用户体验&#xff0c;为用户提供…

Git 基础 GitHub【学习笔记】

一、Git 优势 大部分操作在本地完成&#xff0c;不需要联网完整性保证尽可能添加数据而不是删除或修改数据分支操作非常快捷流畅与 Linux 命令全面兼容 二、Git 程序安装 https://git-scm.com 三、Git 结构 #mermaid-svg-9Go6R1leWXWrDCqn {font-family:"trebuchet ms&quo…

云微客短视频矩阵能带来流量吗?有哪些产品特色?

短视频平台&#xff0c;现如今已经成为了互联网最大的流量池&#xff0c;诸如抖音、快手、小红书、视频号、哔哩哔哩等平台&#xff0c;日活量都在上亿。短视频赛道汇聚了无数的用户群体&#xff0c;所以商企品牌的营销定位就应该在这里。 许多企业看到了这样的营销商机&#x…