数据分析利器Python——爬虫(含爬取过程、Scrapy框架介绍)

2023-10-27

一、基础知识

1、定义

是自动获取互联网信息的程序,用来对互联网信息进行分析、开发产品。

2、基本架构

URL管理模块:对计划爬取或已经爬取的URL进行管理(已爬取不再爬取,未爬取则爬取,已失效网站检测等)
网页下载模块:将URL管理模块中指定的URL进行访问下载
网页解析模块:解析网页下载模块中的URL,处理或保存数据;若解析到需要继续爬取的URL,则返回URL管理模块继续循环。

上图介绍了爬虫的流程,是学习本节的基础。

二、URL管理模块

防止重复爬取和循环指向
功能:

  • 可以添加新的URL
  • 管理已经爬取和未爬取的URL
  • 获取待爬取的URL

实现方式:

  • Python的set集合数据结构(使用了集合中数据的唯一性,适用于数据简单情况)
  • 数据库中的数据表(创建的时候打标签,标记flag位)

三、网页下载模块

将URL对应的网页下载到本地或读入内存(字符串)

Python中的requests模块

request.get(url) 返回request对象,通过request对象的方法获取想要的信息
属性:
status_codes:状态码

常见的状态码:

  • 200:请求成功
    404:请求的资源不存在
    500:内部服务器错误

headers:网页的header信息
encoding:网页编码
text:请求返回的文本信息
content: 以字节形式的非文本信息(图片等)

# 使用jupyter notebook
import requests
url = "https://www.baidu.com"
r_obj = requests.get(url)
r_obj.status_code # 返回状态码
r_obj.encoding = 'utf-8' # 若返回text时出现乱码则先将编码设置为utf-8格式再返回文本
r_obj.text

四、网页解析模块

从已下载网页中解析所需内容

实现方式:

  • 字符串匹配
  • html.parser:Python自带的解析html的工具
  • BeautifulSoup:结构化的网页解析

1、结构化网页解析

DOM(Document Object Model),文档对象模型

2、BeautifulSoup使用步骤

2.1 创建BeautifulSoup对象

BeautifulSoup(
url,
html_parser 指定解析器
encoding 指定编码格式(和网页编码格式一致)
)

2.2、查询节点

find(),找到第一个满足条件的节点
find_all(),找到所有满足条件的节点

方法:按照节点类型或属性查找(需要了解前端开发的部分知识)

  • 按照类型查找:find_all(‘a’) 找到所有的链接【a标签代表链接】
  • 按照属性查找:find_all(‘a’, href=‘test.html’)找到href='test.html的链接

2.3、获取节点信息

查找节点返回的是Tag对象,获取Tag对象信息
【因为一个标签会有很多属性,所以返回的Tag对象是字典类型】

Tag对象属性:
  • Tag.name:节点标签名称,‘a’
  • Tag.attrs:返回节点的属性s,字典类型
  • Tag.text:获取节点文本
间接获取节点信息

children:只返回“孩子节点”
desendants:返回所有子孙节点
next_siblings:返回下一个“同辈节点”
previous_siblings:返回上一个“同辈节点”
parent:返回“父亲节点”
举个栗子

# 使用jupyter notebook
import requests
from bs4 import BeautifulSoup
url = "https://www.baidu.com"
r_obj = requests.get(url)
bs = BeautifulSoup(r_obj.content,
					'lxml' # 解析器
					from_encoding='utf-8'# 指定编码
					)
bs.find('title') # 找title标签
link_tag = bs.find('a') # 找到第一个链接<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>

3、Scrapy框架

3.1、简介

开源的爬虫框架,用于爬取web站点并从页面中提取结构化数据,可用于数据挖掘,检测,自动化测试。

高级特性

  • 内置数据抽取CSS/XPath/re
  • 交互式控制台用于调试
  • 结果输出的格式控制,json、csv、xml等
  • 自动处理编码
  • 可自定义扩展

爬取步骤如图

3.2、安装

pip install scrapy
检测是否安装成功:scrapy bench
使用步骤:

  1. 创建工程

  2. 定义Item,构造爬取的对象(可选)

  3. 编写爬虫主体
    - 使用BeautifulSoup解析网页内容
    - 调用自制的Item

  4. 编写配置和管道,用于处理爬虫结果(可选)

  5. 执行爬虫

# (1)创建工程scrapy startproject 名字
scrapy startproject tutorial
# (2)编写Spyder
cd tutorial
scrapy genspider aqi_spider http://www.pm25.in/
 # aqi_spider为自定义的spider名称

使用Pycharm打开创建的工程并打开对应的Spyder文件,编辑想要输出的代码

scrapy crawl api_spider 
# 运行Spyder文件,api_spider为可定义的名字,与上文的(2)步中同名

含Item的爬取操作举例(Item:将爬取的数据封装成对象,通过对象访问爬取的一些属性)同样操作aqi_spider.py文件,在类下加入如下方法

    def parse(self,response):
        bs = BeautifulSoup(response.body,'lxml')
        div_obj = bs.find('div',class_ = 'all')
        li_tag_list = div_obj.find_all('li')
        for li_tag in li_tag_list:
            city_item = CityItem()
            city_item['city_name'] = li_tag.find('a').text
            city_item['city_link'] = li_tag.find('a')['href']
            yield city_item

接下来对数据进行进一步处理——编写配置Pipeline。主要目的是处理之前解析的Item,将文件保存
首先,需要在setting.py中配置信息。
在这里插入图片描述
添加open_spider()函数,close_spider()函数
在这里插入图片描述
通过scrapy crawl api_spider语句运行文件后会在目录中产生一个cities.csv文件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据分析利器Python——爬虫(含爬取过程、Scrapy框架介绍) 的相关文章

随机推荐

  • AIGC赋能教育

    在这个科技迅速进步的时代 全球教育领域正迎来一场前所未有的数字化和技术化变革 而AIGC则是代表了人工智能与教育的融合 它正在改变着学习方式 提高教育质量 并重新定义了教育的未来 我们正在亲眼目睹AIGC如何塑造着全球教育的格局 为学生 教
  • 最新IDE流行度最新排名(每月更新)

    2023年09月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多 这个IDE就被认为越受欢迎 原始数据来自谷歌Trends 如果您相信集体智慧 Top IDE索引可以帮助您决
  • 查看Linux服务器上当前机器监听的端口信息

    netstat lntp
  • 找不到viewModels,viewModels()

    谷歌官方文档上学习mvvm 当我写到private val model UserViewModel by viewModels 时 viewModels 爆红 查了资料 找到gradle 添加依赖 dependencies implemen
  • (二)Java常量与变量

    Java常量与变量 主要内容 标识符 关键字 变量 数据类型 类型转换 常量 一 标识符与关键字 1 标识符 类的名字就是标识符 标识符的命名规则 标识符只能由字母数字下划线和美元符 组成 不能以数字开头 标识符不能有空格 标识符严格区分大
  • 龙蜥(Anolis) 编译PHP-8.1.22提示No supported shared memory caching support was found when configuring opcac

    龙蜥 Anolis 编译PHP 8 1 22提示No supported shared memory caching support was found when configuring opcac 使用龙蜥 Anolis 编译安装php8
  • SpringBoot入门最详细教程

    网上有很多springboot的入门教程 自己也因为项目要使用springboot 所以利用业余时间自学了下springboot和springcloud 使用下来发现springboot还是挺简单的 体现了极简的编程风格 大部分通用都是通过
  • 如何用ChatGPT使开发效率提高50%以上?

    简介 ChatGPT是一个大型语言模型 由OpenAI开发 它被训练用于进行对话式交互 能够理解和生成自然语言文本 ChatGPT可以用于多种任务和场景 包括但不限于 智能助手 创意生成 语言学习 编程辅助等 ChatGPT的优势在于它的广
  • Eclipse汉化教程

    在看了很多博主的安装教程后 我不是很懂为什么要查找版本号 此处提供另一种方法 1 查看eclipse安装时间 若刚安装的 请直接看第二条 打开eclipse 在help里找到about 具体请看下图的图标和位置 打开后 找到buildid
  • Java多线程基础之创建和运行

    前言 在现代软件开发中 多线程编程已经成为一项重要的技能 通过合理地利用多线程 我们可以实现并发处理 提高程序性能和改善用户体验 本文将介绍Java中多线程编程的基础知识 包括多线程的概念 线程的创建和运行 以及线程的生命周期和状态转换 一
  • Linux(ubuntu)上安装vmware workstation虚拟机

    Linux ubuntu 上安装vmware workstation虚拟机 首先下载vmware workstation 官网下载地址 https www vmware com products workstation pro workst
  • Qt中的HTTP

    Qt中的HTTP HTTP概述 两种架构 基于请求响应的模式 无状态 请求报文 响应报文 请求方式 Qt实现HTTP请求 HTTP概述 HTTP是一种超文本传输协议 是一种用于分布式 协作式和超媒体信息系统的应用层协议 是浏览器端Web通信
  • GDB常用指令

    摘抄整合 勿喷 GDB r run 执行程序 n next 下一步 不进入函数 s step 下一步 会进入函数 b breakponit 设置断点 l list 查看源码 c continue 继续执行到下一断点 bt backtrace
  • Android AIDL使用详解

    1 什么是aidl aidl是 Android Interface definition language的缩写 一看就明白 它是一种android内部进程通信接口的描述语言 通过它我们可以定义进程间的通信接口 icp interproce
  • C++ Primer 第Ⅱ部分笔记

    1 向算法传递函数 1 1向排序算法传递二元谓词 定义isSHorter方法 bool isShorter const int i const int j return i
  • C++中deque的用法(超详细,入门必看)

    博主简介 Hello大家好呀 我是陈童学 一个与你一样正在慢慢前行的人 博主主页 陈童学哦 所属专栏 C STL 如果本文对你有所帮助的话 希望可以点赞 收藏 支持一下哦 期待你的关注 一起成长哟 前言 Hello各位小伙伴们好 欢迎来到本
  • Spring事务源码详解-spring原码(二)

    上篇文章介绍了事务开启 前面介绍了解析adviors spring事务源码详解 spring原码 一 https blog csdn net ke1ying article details 131360060 事务源码 先从缓存里获取 主要
  • django view.py error 'function' object has no attribute 'objects' 解决办法

    view py中函数和app的名字重复了 请def一个和app名字不一样的函数名 问题就解决了 参考 http stackoverflow com questions 28471404 attributeerror function obj
  • Qt 编译一直死循环问题

    Qt 编译一直死循环问题 有时候Qt编译项目时 一直编不过 查看一下编译窗口 发现一直在循环 输出如下 C soft Qt5 11 5 11 1 mingw53 32 bin qmake exe o Makefile PalmQtLib P
  • 数据分析利器Python——爬虫(含爬取过程、Scrapy框架介绍)

    文章目录 一 基础知识 1 定义 2 基本架构 二 URL管理模块 三 网页下载模块 Python中的requests模块 四 网页解析模块 1 结构化网页解析 2 BeautifulSoup使用步骤 2 1 创建BeautifulSoup