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

news/2024/7/19 9:59:32 标签: 爬虫

数据采集与预处理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.niftyadmin.cn/n/5342595.html

相关文章

关于网络协议的笔记

简介: 协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连 接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语 法、语义、时序。 为了使数据…

浪花 - 添加队伍业务开发

一、接口设计 1. 请求参数:封装添加队伍参数 TeamAddRequest package com.example.usercenter.model.request;import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.ann…

361. 观光奶牛(小数二分,spfa判断正环,01分数规划)

361. 观光奶牛 - AcWing题库 给定一张 L 个点、P 条边的有向图,每个点都有一个权值 f[i],每条边都有一个权值 t[i]。 求图中的一个环,使“环上各点的权值之和”除以“环上各边的权值之和”最大。 输出这个最大值。 注意:数据保…

自然语言处理--基于HMM+维特比算法的词性标注

自然语言处理作业2--基于HMM维特比算法的词性标注 一、理论描述 词性标注是一种自然语言处理技术,用于识别文本中每个词的词性,例如名词、动词、形容词等; 词性标注也被称为语法标注或词类消疑,是语料库语言学中将语料库内单词…

uni-app (安卓、微信小程序)接口封装 token失效自动获取新的token

一、文件路径截图 1、新建一个文件app.js存放接口 //这里存放你需要的接口import {request} from /utils/request.js //这个文件是请求逻辑处理 module.exports {// 登录 -- 注册perssonRegister: (data) > { // 供应商注册 return request({url: manageWx/Login/perssonR…

Clamp cell 介绍

Clamp cell(夹持单元)是芯片设计中用于限制电路中某个节点的电压范围的重要电路单元。它的主要目的是确保电路中的信号或电源电压不会超出安全范围,从而保护芯片免受潜在的损坏或性能问题。 电压限制: Clamp cell的主要功能之一是…

数据分析的理念、流程、方法、工具(下)

四、用户分群 1、用户分群 用户分群是精细化运营的基础要求,也是数据分析的最基础方式。对用户进行分群,能帮助我们了解每个细分群体用户的变化情况,进而了解用户的整体现状及发展趋势。同时,由于运营资源本身有限,不…

软件安全测试的重要性简析,专业安全测试报告如何申请?

在当今数字化时代,软件在我们的日常生活中扮演着至关重要的角色,但也带来了各种潜在的安全威胁。为了保障用户的信息安全和维护软件的可靠性,软件安全测试显得尤为重要。 软件安全测试是指通过一系列的方法和技术,对软件系统中的…