#校园博客作业,如有不全可在评论区补充(啾咪~)#
参考文献:柳州职业技术学院学习通
第一章:网络爬虫基础
1.国内镜像包:pip install ***** -i Simple Index
2.csdn打分系统:https://www.csdn.net/qc
3.爬虫技术路线:
- 静态网页 { requests请求源码{1.根据实际情况,制作url循环,一般每个列表url里 包括多个详情页面url
{2.通过xpath方法提取数据(bs4)或通过正则表达 式方法提取数据
{ 通过crawlspider请求源码{1.按步骤框架搭建
{2.可选:Scrapy Shell工具测试xpath语法
{3.setting等注意事项(重要)
- 动态网页 {谷歌浏览器-F12-XIR-Name里: requests请求在动态url里的json数据
{1.注意转化成 数组格式,作为循环母体
{2.循环提取母体数据
{selenium直接提取前端数据{1.注意前置环境搭配,主要是谷歌驱动器与谷歌浏览 器版本要匹配;同时注意selenium的版本号,目前 4.X.X版本内存在闪退情况,需要安装3.X.X版本
{2.使用selenium拟人方法进行页面操作
{3.通过xpath提取数据
1.1.认识网络爬虫
- 网络爬虫概念:网络爬虫又称网络蜘蛛/网络机器人,它是一种按照一种规则,自动浏览万维网的程序或脚本。通俗的讲,网络爬虫就是一个模拟真人浏览万维网行为的程序,这个程序可以代替真人自动请求万维网,并且接收从万维网返回的数据。与真人浏览万维网相比,网络爬虫能够浏览的信息量更大,效率也更高。
- 网络爬虫分类:网络爬虫经历几十年的发展,技术变得更加多样化,并结合不同的需求衍生出类型众多的网络爬虫。网络爬虫按照系统结构和实现技术大致可以分为4种类型,分别是通用网络爬虫/聚焦网络爬虫/增量式网络爬虫/深层网络爬虫。
- 网络爬虫的应用场景:随着互联网信息的“爆炸”,网络爬虫渐渐为人们所熟知,并被应用到了社会生活的众多领域。作为一种自动采集网页数据的技术,很多人其实并不清楚网络爬虫具体能应用到什么场景。事实上,大多数依赖数据支撑的应用场景都离不开网络爬虫,包括搜索引擎/舆情分析与监测/聚合平台/出行类软件等.
1.2.网页请求原理
1.
- 浏览器通过域名系统服务器对应的IP地址
- 浏览器想IP地址对应的Web服务器发送HTTP请求
- Web服务器接收HTTP请求后进行处理,向浏览器返回HTML页面
- 浏览器对HTML页面渲染呈现给用户
2.url简介
URL又称URL地址,表示统一资源定位符,用于指定因特网上某个资源的位置。URL地址的语法格式如下。
- scheme选项用于规定如何访问指定资源的主要标识符,它会告诉分析UR程序应该使用什么传输协议
- host指存放资源的主机名或者IP地址,它用于标识互联网上唯一一台计算机,保证用户在互联网的计算机说可以高效地从成千万台计算机中找到这台计算机.
第二章:网络爬虫的基本模板
模板1:
该模板使用requests
库发送HTTP请求,使用BeautifulSoup
库解析网页内容。首先,我们定义目标网站的URL,然后发送HTTP请求并获取网页内容。接下来,我们创建BeautifulSoup
对象并解析网页内容,使用soup.title.string
获取网页标题,并使用soup.find_all("a")
获取所有链接。最后,我们遍历链接列表并打印每个链接的href属性:
import requests
from bs4 import BeautifulSoup
# 定义目标网站的URL
url = "http://example.com"
# 发送HTTP请求并获取网页内容
response = requests.get(url)
# 创建BeautifulSoup对象并解析网页内容
soup = BeautifulSoup(response.text, "html.parser")
# 获取网页标题
title = soup.title.string
print("网页标题:", title)
# 获取所有链接并打印
links = soup.find_all("a")
for link in links:
print("链接:", link.get("href"))
模板2:
爬取网站模板:
该模板使用requests
库发送HTTP请求,并使用response.text
属性获取网页的HTML代码。在模板中,我们定义目标网站的URL,然后发送HTTP请求并获取网页内容。最后,我们打印网页的HTML代码:
import requests
# 定义目标网站的URL
url = "http://example.com"
# 发送HTTP请求并获取网页内容
response = requests.get(url)
# 打印网页代码
print(response.text)
PS:如果需要解析网页内容,可以使用类似于BeautifulSoup
的库来解析HTML代码。例如,可以使用以下代码将HTML代码解析为BeautifulSoup对象:
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, "html.parser")
然后,可以使用BeautifulSoup对象的方法来查找和提取所需的数据。例如,可以使用soup.find()
或soup.find_all()
方法查找特定的HTML元素,并使用element.string
属性提取元素的文本内容。
第三章:解析网页数据
- 正则表达式:正则表达式是对字符串操作的一种逻辑公式,他将事先定义好的一些特定字符,以及这些特定字符的组合,组成一个规则字符串,并且通过这个规则字符串表达对给定字符串的过滤逻辑。
- 一条正则表达式也称为一个模式,使用每个模式可以匹配指定文本中与表达式相同的字符串。正则表达式有普通字符、元字符或预定义字符集组成,其中普通字符包括大小写字母和数字。
正则表达式语法:
1.元字符:
.
:匹配除了换行符之外的任何单个字符。^
:匹配字符串的开头。$
:匹配字符串的结尾。*
:匹配前面的字符或子模式零次或多次。+
:匹配前面的字符或子模式一次或多次。?
:匹配前面的字符或子模式零次或一次。{n}
:n是一个非负整数。匹配确定的n次。{n,}
:n是一个非负整数。至少匹配n次。{n,m}
:m和n均为非负整数,其中n <= m。最少匹配n次且最多匹配m次。
2.字符类:
[abc]
:匹配方括号内的任何字符。[^abc]
:匹配任何未列在方括号内的字符。
3.选择、分组和引用:
|
:或者。( )
:分组。\n
:n是一个非负整数。匹配第n个分组的内容。
4.预定义模式:
\d
:匹配任何数字,等价于[0-9]。\D
:匹配任何非数字字符,等价于[^0-9]。\w
:匹配任何字母、数字或下划线字符,等价于[a-zA-Z0-9_]。\W
:匹配任何非单词字符,等价于[^a-zA-Z0-9_]。
5.边界:
\b
:单词边界。\B
:非单词边界。
6.修饰符:可以在正则表达式的末尾添加“i”来使匹配对大小写不敏感。例如,“/hello/i”将匹配“hello”和“HeLLo”。
7.贪婪与非贪婪匹配:默认情况下,正则表达式使用贪婪匹配,即尽可能多地匹配字符。要使用非贪婪匹配,在元字符后添加一个问号,例如“.*?”将尽可能少地匹配字符。
8.特殊字符转义:如果要在正则表达式中表示特殊字符,可以使用反斜杠“\”进行转义。例如,“\d”将匹配数字字符。