数据采集与预处理02 :网络爬虫实战

news2024/10/6 20:32:31

数据采集与预处理02 :网络爬虫实战

爬虫基本知识

1 HTTP的理解

URL uniform resource locator. 是统一资源定位符,URI identifier是统一资源标识符。几乎所有的URI都是URL。

URL前部一般可以看到是HTTP还是HTTPS, 这是访问资源需要的协议类型。HTTP hyper text transfer protocol 是客户端和服务器端请求和应答的标准,是互联网中应用最为广泛的一种协议。

HTTPS是以安全为目标的HTTP通道,加入了SSL层。

2 网页基础知识

网页的组成分为三大部分,HTML、CSS(Cascading Style sheets)层叠样式表、javascript。

在网页中,组织页面的对象被渲染成一个树形结构,用来标识文档中对象的准确模型,称为文档对象模型 Document Object Model DOM。

点击查看图片来源

3 爬虫基本原理

网络爬虫本质上就是获取网页并提取和保存信息的自动化程序。

爬虫的首要工作就是获取网页源代码,再从中提取想要的数据。urllib requests等库都能够实现HTTP请求的操作。

获取网页源代码后,接下来的工作就是分析网页源代码,最通用的方式是使用正则表达式。在python中,使用BeautifulSoup PyQuery LXML等库,可以更高效的从源代码中提取网页信息。

提取信息之后,可以将数据保存到本地,以便后续使用。

点击查看图片来源

4. 基本库的使用

以下基于python3.8

4.1 urllib

urllib库是python中一个功能强大,用于操作URL并在制作爬虫过程中经常用到的库。

发送请求:
import urllib.request

r=urllib.request.urlopen("HTTP://www.python.org/")
print(r)
读取响应内容
import urllib.request
url="HTTP://www.python.org/"
with urllib.request.urlopen(url) as r:
    r.read()

r.read() 将相应内容读到内存。

传递URL参数
import urllib.request
import urllib.parse
params=urllib.parse.urlencode({'q':'urllib','check_keywords':'yes','area':'default'})
url="HTTPS://docs.python.org/3/search.html?{}".format(params)
r=urllib.request.urlopen(url)
传递中文参数
import urllib.request
searchword=urllib.request.quote(input("请输入要查询的关键字:"))
url="HTTPS://cn.bing.com/images/async?q={}&first=0&mmasync=1".format(searchword)
r=urllib.request.urlopen(url)
print(r)
定制请求头
import urllib.request
url="链接"
headers={
'User-Agent':……
'Referer':……
req=urllib.request.Request(url,headers=headers)
r=urllib.request.urlopen(req)
}
传递POST请求
import urllib.request
import urllib.parse
url="链接"
post={
'username':'xxx'
'password':'xxxxx'
}

postdata=urllib.parse.urlencode(post).encode('utf-8')
req=urllib.request.Request(url,postdata)
r=urllib.request.urlopen(req)
下载远程数据到本地

urllib.request.urlretrieve(url,"python-logo.png)

另外患有设置代理、异常处理和Cookie的使用,不再赘述。

4.2 BeautifulSoup

BeautifulSoup提供一些简单的,python方式的函数处理导航、搜索、修改分析树等功能。

创建BeautifulSoup对象
from bs4 import BeautifulSoup
soup=BeautifulSoup(html)
print soup.prettify()
四大对象类

BeautifulSoup将复杂的HTML文档转换称为一个复杂的树形结构,归纳为4种:Tag , NavigableString, BeautifulSoup, Comment.

Tag就是一个个标签。

print soup.title
print soup.head
print soup.a
print soup.p

NavigalbeString

不仅可以得到标签内容,还可以通过“.string”获取标签内部的文字。

print soup.p.string

BeautifulSoup

BeautifulSoup对象表示一个文档的全部内容。

print type(soupp.name)

comment

comment对象是一个特殊类型的NavigableString对象,其输出内容不包括注释符号。

遍历

Tag的contents属性可以使Tag的子节点以列表方式输出。

print soup.head.contents
print soup.head.contents[0]

Tag的children返回的不是一个list,而是list生成器对象,可以用来遍历获取所有子节点。

descendants可以对所有子孙结点进行递归循环。

如果Tag只有一个NavigableString类型的子节点,那么Tag可以使用string得到子节点。

使用.stripped_strings可以去除多余空白内容。

使用元素的.parent属性可以获取父节点。

搜索

使用 find_all()搜索

  • name参数 用来查找所有名称为name的tag。
#传字符串
soup.find_all('b')

# 传正则表达式
import re
for tag in soup.find_all(re.compile("^b")):
	print(tag.name)

#传列表
soup.find_all(["a","b"])

#传True
for tag in soup.find_all(True):
	print(tag.name)
  • attrs参数
data_soup.find_all(data-foo="value")

data_soup.find_all(attrs={"data-foo":"value"})
  • recursive参数
soup.html.find_all("title",recursive=False)
# recursive=True意味着直接检索子节点
  • text参数

通过text参数可以搜索文档中的字符串内容。

soup.find_all(text="test1")
  • limit参数
soup.find_all("a",limit=2)
#限制返回数量
select()

使用soup.select()方法从css中筛选,返回类型是list。

print soup.select('title')
print soup.select("a")

print soup.select(#id值)

print ("head>title")

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

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

相关文章

HelloWorld(java)

1.切换盘符:找到刚刚书写的代码 2.编译:javac是JDK提供的编译工具,通过这个工具,把当前路径下下的HelloWorld.java文件编译成class文件 3.运行:java也是JDK提供的一个工具,作用就是用来运行代码&#xff…

2024.1.23 寒假训练记录(6)

记录一个训练赛踩的大坑:往函数里传vector一定要加引用!犯了三次的错误还是记不住,服了,一道题调了一个小时。 文章目录 CF 1490E Accidental VictoryCF 1753B Factorial DivisibilityCF 1454E Number of Simple PathsAT ARC148A …

ImportError: The Qt version imported is 5.9.7 but Matplotlib requires Qt>=5.12

一、错误描述 ImportError: The Qt version imported is 5.9.7 but Matplotlib requires Qt>5.12 在用python中的plt包进行绘图时对plt进行了更新,更新之后再运行以前的代码就出现了这个问题。 二、bug消除 (一)解决方法——升级pyqt包…

Java面试题之基础篇

文章目录 一:谈谈你对面向对象的理解二:JDK、JRE、JVM三者区别和联系三:和equals比较四:hashCode与equals五:final六:String、StringBuffer、StringBuilder七:重载与重写的区别?八&a…

【云原生】认识docker容器操作命令

目录 一、容器操作命令 1、创建容器 2、删除容器以及停止容器运行 3、查看容器的运行状态 4、查看容器的详细信息 5、将容器的文件传输到宿主机以及将宿主机的文件传输到容器中 6、批量删除容器 7、进入容器 二、容器的迁移 1、先在容器中创建测试文件 2、将容器存储…

永磁同步电机矢量控制原理

永磁同步电机数学模型 永磁同步电机的磁场定向控制

宝塔面板部署MySQL并结合内网穿透实现公网远程访问本地数据库

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

x-cmd pkg | ascii-image-converter - 图像转 ASCII 艺术照工具

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 ascii-image-converter 是图像转换工具,用于将图像转换为 ascii art 图片并在控制台上打印。 首次用户 使用 x env use ascii-image-converter 即可自动下载并使用 在终端运行 eval "$(curl https:/…

部署 IT 资产管理系统 GLPI

一、GLPI 介绍 GLPI 简介 参考:https://github.com/glpi-project/glpi GLPI 是一款开源的 IT 资产管理和服务台软件,可以帮助组织管理和跟踪 IT 资产、故障、变更、问题等。 使用 Docker 来部署 GLPI 可以简化安装和配置过程,并提供一个独立…

透明拼接屏代工:专业制造与质量保证

透明拼接屏代工是指专业的代工厂家根据客户的需求,为其生产透明拼接屏产品。随着透明拼接屏市场的不断扩大,越来越多的企业选择通过代工方式快速进入市场。尼伽小编将深入探讨透明拼接屏代工的优势、选择合适的代工厂家以及质量保证等方面的内容。 一、透…

[C语言]百行代码实现通讯录(进阶篇)

目录 前言: 1.进阶通讯录特点: 2.实现步骤: (1)定义一个结构体来存储联系人的基本信息例如:名字、电话、性别等 ; (2)定义另一个结构体来封装联系人及其个数以及记录…

C语言零基础入门第1天《什么是C语言?》

C语言零基础入门第1天《什么是C语言?开篇点题》 1、什么是C语言2、为什么要使用 C?3、C有哪些好处、优点? 4、C排行榜排名5、C语言为什么是编程语言的神?6、鼓励你,为你叫好! C语言——编程之本&#xff0c…

vulhub之Zabbix篇

CVE-2016-10134--SQL注入 一、漏洞介绍 zabbix是一款服务器监控软件,其由server、agent、web等模块组成,其中web模块由PHP编写,用来显示数据库中的结果。 漏洞环境 在vulhub靶场进行复现,启动zabbix 3.0.3。 二、复现步骤 1…

L1-096 谁管谁叫爹(Java)

《咱俩谁管谁叫爹》是网上一首搞笑饶舌歌曲,来源于东北酒桌上的助兴游戏。现在我们把这个游戏的难度拔高一点,多耗一些智商。 不妨设游戏中的两个人为 A 和 B。游戏开始后,两人同时报出两个整数 NA 和 NB。判断谁是爹的标准如下: …

一文让你彻底搞懂cookie和session产生漏洞的原理

首先让我们来看看登录的一般流程: 输入账号密码提交给后端;后端进行判断账号密码是否一致,这里的逻辑根据每个程序员的想法去写;如果通过2登录成功,跳转登录成功的页面; 如果通过2登录失败,跳转…

每日一题——LeetCode1309.解码字母到整数映射

方法一 个人方法&#xff1a; 由题意可得&#xff1a; 1、1-26对应a-z&#xff0c;只不过从10开始&#xff0c;后面要加#才能表示字母 2、10# - 26# 都是三位数&#xff0c;开头<2&#xff0c;结尾都为# 3、某个数后面两位如果不为#那么该数为1-9对应a-i&#xff0c;如果…

pikachu_csrf通关攻略

csrf&#xff08;get&#xff09; 打开pikachu靶场&#xff1a; 1. 根据提示给的账户密码进行登录 2. 打开代理拦截数据包将拦截数据发送到已打开的burp中&#xff1a; 修改数据进行发包&#xff1a; 从上面的url可见&#xff0c;修改用户信息的时候&#xff0c;是不带任何不…

npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED

npm install时报错code CERT_HAS_EXPIRED 一、报错情况二、解决方案 一、报错情况 一直用的好好的&#xff0c;突然今天发现npm install 出问题了&#xff0c;具体报错如下&#xff1a; npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to…

Flink中的时间和窗口(时间语义,水位线,窗口,迟到数据的处理)

目录 Flink中的时间和窗口 1时间语义 1.1Flink中的时间语义 1.1.1处理时间 1.1.2事件时间 1.2那种时间语义更重要 2 水位线 2.1 事件时间和窗口 2.2 什么是水位线 2.3 如何生成水位线 2.3.1使用WatermarkGenerator 2.3.2使用SourceFunction 2.4 水位线的传递 2.5 水位…

【LeetCode每日一题】670. 最大交换

2024-1-22 文章目录 [670. 最大交换](https://leetcode.cn/problems/maximum-swap/)思路&#xff1a; 670. 最大交换 思路&#xff1a; 从后往前遍历整数的字符数组&#xff0c;找到第一个比当前最大值小的数字&#xff0c;然后将该数字与最大值进行交换。 将给定的整数转换为…