爬虫基础

1、爬虫的概念

​ 概念:(spider,网络蜘蛛)通过互联网上一个个的网络节点,进行数据的提取、整合以及存储

分类:

通用爬虫(了解)

​ 主要用于搜索引擎(百度、Google ,搜狗等)

​ 搜索引擎的工作原理:

​ 核心部分:通过爬虫按照互联网的拓扑结构,进行批量的数据抓取,然后进行数据清洗与整合,然后按照一定的次序存入百度的数据库集群

​ 检索部分:实质上就是一个web系统,给用户提供一个检索平台

​ 搜索引擎获取数据的方式:

​ 1)通过通用爬虫

​ 2)主动的提交自己的网站

​ 3)通过竞价排名(信息排名:1、流量 2、竞价)

​ 4)搜索引擎和DNS的运营商合把一些有价值的网站收录过来

​ robots协议:
​ robots协议不是技术层面的协议,只是一个君子协定;首先在爬取一个网站的时候,第一步就是访问这个网站的robots.txt文件,在这个文件中规定了那些东西能爬哪些东西不能爬,爬虫要严格遵守,只爬取允许的内容,不要去爬取不允许的内容,搜索引擎爬虫一定遵守robots协议;我们写的话可以不遵守。

​

聚焦爬虫

​ 根据客户的需求,定制一些针对性比较强的爬虫

​ 工作原理:

​ 1、数据提取(抓取)

​ 技术:http协议等应用层协议

​ 反爬:用户代理、IP禁止、验证码、会话处理等

​ 2、数据的分析

​ 遇到的数据:html、json、xml、js数据

​ 反爬:js动态加载、js加密、后台加密等

​ 3、数据的存储

​ CSV数据、json数据、关系型数据库、非关系型数据库

​ 爬虫主要研究如何对付反爬

​ 学习内容:

​ 1、python

​ 2、相关的框架

​ urllib、requests、scripy等数据的抓取

​ 正则、xpath、bs4、selenium等

​ 3、分布式部署

2、HTTP协议

​ 1、什么是HTTP协议?

​ 1)是一个基于请求与响应的应用层协议,底层协议是TCP保证了整个传输过程的可靠性
2)通过url来进行客户端与服务器的交互(url解释:统一资源定位符,用于定位互联网上资源的位置,格式,协议://主机名.域名:端口号/路径名…?参数1=值1&参数2=值2&…#锚点)
3)是一种C/S(B/S是一种特殊的C/S结构)模式的协议,客户端发起请求,服务端处理请求并响应
4)它是一种无状态的协议,它通过cookie或者session来处理会话信息

​ 2、http的过程

​ 1)创建TCP链接:三次握手,客户端首先向服务器发出一个是否同意创建连接的请求,然后服务根据自己的任务量决定是否创建,并且把是否创建连接的相关信号返回给客户端,然后客户端如果接到了同意创建连接的信号,就正式的发起一个创建连接的信号,并且带上http协议的报文。通过三次握手客户端和服务器之间建立齐了一条数据通路,就可以保证HTTP协议的可靠传输

​ 2)客户端向服务器发起HTTP请求:通过url把参数以及请求头信息传递给服务器,常见的请求方式有4中,常用的是get和post

​ 请求头:包含了本次请求的相关配置信息(比如:主机、cookie、数据格式等),决定了客户端和服务之间数据交流的方式与格式

​ 请求体:就是参数,也即是客户端要想服务器提交的数据

​ get请求和post请求的区别:

​ get请求参数拼接在url后面的,post请求参数不体现在url中(一般直接通过表单提交);get请求数据量有限制(不同的浏览器对url的长度都有不同的限制),post请求是没有限制的

​ 3)服务器处理请求,并且把数据响应出去

​ 4)判断数据是否传输结束,如果结束,四次挥手断开TCP链接

3、工具

​ windows、Linux、fiddler

urlib模块

  • urllib是python提供的一个用于发起http请求以及处理请求相关业务和url的工具,后期爬虫的一些框架都是基于urllib
  • request是urllib中请求工具
方法
# 1、urlopen(),用打开一个远程链接,并且发起请求,然后返回响应对象
url = "http://www.baidu.com/"
res = request.urlopen(url=url)
print(res) # <http.client.HTTPResponse object at 0x000001C6422A8D30> 响应对象
# print(res.headers) # 输出响应头
# 读取响应体
print(res.read()) # 默认读取出来的是二进制
print(res.read().decode("utf-8")) 
# read函数是迭代读取,第二次读取是接着第一次的后面开始


# 2、urlretrieve(url,filename),对url发起请求,并且把响应体写入filename对应的文件中
r = request.urlretrieve(url=url,filename="./baidu.html")
print(r)	#('./baidu.html', <http.client.HTTPMessage object at 0x0000000002D4AC50>) 
request.urlretrieve(url="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1563170159325&di=9a44a383d70207bd3aa08a4a639e1bbd&imgtype=jpg&src=http%3A%2F%2Fimg4.imgtn.bdimg.com%2Fit%2Fu%3D1802778634%2C700132782%26fm%3D214%26gp%3D0.jpg",filename="./hello.jpg")


# 3、urlencode(),对url进行编码
url = "https://www.baidu.com/s?"
      # "ie=utf-8&wd=hello"

# 对于urllib不能直接接收非ascii码字符,我们需要将其转成ascii码格式
from urllib.parse import urlencode
# parse模块用于处理url格式
# 创建一个字典
dic = {"ie":"utf-8","wd":"老王"}
# 用urlencode方法来将字典处理成http参数的形式(参数1=值1&参数2=值2&.....)
params = urlencode(dic)
print(params)
res = request.urlopen(url=url+params)
print(res)
# request.urlopen(url="https://weibo.cn/pub/") # 直接访问是非法访问就会被拒绝
  • 解决https访问被拒绝

    • 反爬:用户代理
    • 用户代理:后台可以通过检测前端提交的请求头中的user-agent这个请求头,从他的值中得出当前正在访问的终端是什么,然后根据当前终端的版本信息决定应该影响什么样的内容。如果检测不到user-agent,或者检测到的user-agent和系统中任何一种user-agent都不匹配,那么就会拒绝访问。
  • 添加用户代理等请求头信息来伪装浏览器

# 创建Request对象
req = request.Request(url="https://weibo.cn/",headers={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
    'cookie': '_T_WM=39ad9b2cdf11c160cd106f434ec5b03f; SUB=_2A25wL4UqDeRhGeBN7FIR9izJyTSIHXVT0ytirDV6PUJbkdAKLW_fkW1NRFYvP5x_aUas_YRuoCOKxITLjrTEO_vf; SUHB=0WGsVQsvKVLjCH; SCF=AjI0Hr3RTGBbFpCKBVczLVDI3kRMZS13v6nRl4A1AUtFqpi5S7rHssl8CQYL1GRV6zHalH_SSD7ziihqrBfFnC4.; SSOLoginState=1563161978'

})
# 用携带请求头的请求对象发起请求
res = request.urlopen(req)
print(res)
# print(res.read().decode("utf-8"))
with open("./weibo.html","wb") as fp:
    fp.write(res.read())

完整爬虫过程

  • 请求网页

  • 解析网页

  • 存储

from urllib import request
import re
from time import sleep
import csv

# 【下载模块】
# 定义一个函数,用于将url处理成请求对象
def request_from(url,page):
    # 拼接url
    page_url = url + str(page) + "/"
    # 请求头
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
    return request.Request(url=page_url,headers=headers)
# 封装一个函数,用于发起请求
def request_data(url,start,end):
    "这个函数用于将有start页到end页的url处理成响应字符串,然后放在容器中返回"
    # l = []
    # 对start到end进行遍历
    for page in range(start,end+1):
        # 创建请求对象
        req = request_from(url=url,page=page)
        # 发起请求
        res = request.urlopen(req)
        # 每请求一次要让程序中断1s,主要为了防止后台误认为当前程序是爬虫
        print("当期正在请求第%d页..."%page)
        sleep(1)
        # l.append(res.read().decode("utf-8"))
        yield res.read().decode("utf-8")
        # yield可以将一个函数变成一个生成器,生成器中内容就是每一次yield后面的内容
    # return l

# 【解析模块】
def analysis_data(data):
    "这个函数,传入待解析的那些html字符串,输出解析完的格式化的内容"
    for html in data:
        # 解析html字符串
        pat = re.compile(r'<div class="article block untagged mb15".*?single-clear',re.S)
        qiu_list = pat.findall(html)
        # 遍历所有的糗事
        for qiushi in qiu_list:
            # 提取每一个糗事中的内容
            # 创建一个字典用于整合每一个糗事的相关内容
            item = {}
            # 作者姓名
            pat_author = re.compile(r'<h2>(.*?)</h2>', re.S)
            item["author"] = pat_author.findall(qiushi)[0]
            # 内容
            pat_content = re.compile(r'<div class="content">.*<span>(.*?)</span>',re.S)
            item["content"] = pat_content.findall(qiushi)[0]
            # 糗图: 把图片本身存入本地的路径上,在item里面要体现出图片的url和存储路径
            # 找到图片的url路径
            pat_pic = re.compile(r'<div class="thumb">.*?<img src="(.*?)"',re.S)
            pic_url = "https:"+pat_pic.findall(qiushi)[0]
            # print(pic_url)
            # 从url中切分出图片的名字
            pic_name = pic_url.split("/")[-1]
            # 拼接出图片的存储路径
            pic_path = "./qiutu/" + pic_name
            # 下载图片
            request.urlretrieve(url=pic_url,filename=pic_path)
            print("正在下载图片:",pic_path)
            sleep(0.5)
            item["pic"] = {"filename":pic_path,"url":pic_url}
            yield item
# 【存储模块】
# json数据,csv二维表,redis数据库,mysql数据库
# 存二维表
def write_to_csv(data):
    # 打开csv文件
    csvfile = open("./qiubai.csv","a+",encoding="utf-8",newline='') # 以追加的方式打开csv文件
    # 此处容易发生bug,注意编码格式和换行方式

    # 根据打开的csv文件创建写对象
    writer = csv.writer(csvfile)
    # 写表头
    writer.writerow(["author","content","pic_url","pic_path"]) # 这个函数用于写一行
    # 将data中存储的内容写入到二维表中
    for item in data:
        # csv表中每一行就是编程语言中的一个一维列表,所以在这里我们需要将item这个字典转化成列表
        # 创建一个空列表
        row = []
        row.append(item["author"])
        row.append(item["content"])
        row.append(item["pic"]["url"])
        row.append(item["pic"]["filename"])
        # 将row列表写入到csv中
        writer.writerow(row)

if __name__ == '__main__':
    url = "https://www.qiushibaike.com/pic/page/"
    # 请求网页
    content_list = request_data(url=url,start=1,end=35)
    print(content_list)# <generator object request_data at 0x000001C18741D780>
    # 解析
    list = analysis_data(content_list)
    # 存储
    write_to_csv(list)

python爬虫入门教程(非常详细)_爬虫python入门 阅读详情

相关推荐

Python网络爬虫基础

基础知识讲解部分(网络爬虫入门) 网络爬虫就是自动地从互联网上获取程序。想必你听说过这个词汇,但是又不太了解,大家会觉得掌握网络爬虫还是要花一些功夫的,因此这个门槛让你有点望而却步。我常常觉得计算机和互联网的发明给人类带来了如此大的便利,让人们不用阅读说明书就知道如何上手,但是偏偏编程的道路却又是如此艰辛。因此,我会尽可能做到浅显易懂,希望读者能够读懂我说了什么,从而能够享受到其中的快乐。 基本介...

qq_41200123的博客 5665

爬虫入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

相比其他静态编程语言(如java、c#与c++)Python抓取网页文档的接口更简洁,而对比其他动态脚本语言(如perl,shell)Python的urllib包提供了较为完整的访问网页文档的API。Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

wly55690的博客 6592

爬虫基础(1)什么是网络爬虫

文章目录一. 认识网络爬虫二. 网络爬虫的组成三. 网络爬虫的类型1. 通用网络爬虫2. 聚焦网络爬虫3. 增量式网络爬虫4. 深层网络爬虫(1)静态网页(2)深层页面和表层页面(3)网络爬虫表单填写四. 网络爬虫的用途 一. 认识网络爬虫 说起网络爬虫,人们常常会用这样一个比喻:如果把互联网比喻成一张网,那么网络爬虫就可以认为是一个在网上爬来爬去的小虫子,它通过网页的链接地址来寻找网页,通过特定的搜索算法来确定路线,通常从网站的某一个页面开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地

Python达人 2841

爬虫基础知识(爬虫小白入门必学!!!)

1、HTML 负责定义网页的内容和结构。2、CSS 用来设计网页的外观和布局。3、JavaScript 提供了网页的功能性和互动性。

m0_56184997的博客 2674

Python 网络爬虫入门与实践:从基础到高级技巧

详细介绍了 Python 网络爬虫的基础知识、常用库、实战案例以及高级技巧

AI+全栈,AI+应用,实操落地,前沿技术 1691

python网络爬虫学习笔记(1)爬虫概述 安装 Python基础

网络爬虫学习笔记(1) 1 资料 《Python网络爬虫从入门到实践》唐松,陈志铨。主要面向windows平台下的python3。 2 笔记 2-1 爬虫概述 (约2016年)网络爬虫个人使用和科研范畴基本不存在问题,但商业盈利范畴就要看对方了。 通过网站的Robots协议(爬虫协议)可以知道可以和不可以抓取的内容,例如淘宝的[link]https://www.taobao.com/robots...

user_987654321的博客 1800

爬虫大全:从零开始学习爬虫的基础知识,小白也能学

爬虫是一种自动获取网站信息的技术,它可以帮助我们快速地抓取海量网站数据,进行统计分析、挖掘和展示。本文旨在为初学者详细介绍爬虫的基础知识,包括:爬虫原理、爬虫分类、网页结构分析、爬虫工具和技能、爬虫实践示范,以及如何绕过反爬虫机制等内容,让你轻松入门、快速提升。

z099164的博客 3955

用VASP计算GW+BSE

VASP在5.3以后的版本都能用解BSE方程的方法,在计算光吸收的过程中考虑激子效应。 下面就来写一个用BSE计算bulkSi的例子 首先,介电函数的计算是在GW计算的基础之上的。这里首先介绍G0W0的计算(我们这里直接在PBE的波函数基础上进行G0W0计算)。 1.PBE自恰计算,写WAVECAR System= Silicon groundstate occupied

ultra1989的专栏 2万+

网络爬虫基础知识与应用指南

网络爬虫(Crawler),又被称为网页蜘蛛(Spider)、网络机器人,是一种按照一定规则,自动抓取万维网信息的程序或脚本。常见的应用案例包括 Google、百度、Bing 等搜索引擎,它们通过爬虫技术从互联网上获取海量信息并建立索引。

wsygjbr的博客 2338

【Spring源码三千问】哪些循环依赖问题Spring解决不了?

哪些循环依赖问题Spring解决不了?前言版本约定正文场景一: prototype 类型的循环依赖场景二: constructor 注入的循环依赖场景三:Proxy 类型的 Bean 的循环依赖小结 系列博文: 【老王读Spring IoC-0】Spring IoC 引入 【老王读Spring IoC-1】IoC 之控制反转引入 【老王读Spring IoC-2】IoC 之 BeanDefinition 扫描注册 【老王读Spring IoC-3】Spring bean 的创建过程 【老王读Spring I

老王的专栏 7319

STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距

STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距 关键词:语音提示盲人拐杖 整点报时 超声波测距拐杖

LS840233684的博客 2047

python基础及网络爬虫

Python爬虫学习第一课,了解何为爬虫,python基础语法了解

记录学习路上的一些拙见 2867

blenderproc 制作位姿估计数据集

blenderproc 制作位姿估计数据集 准备工作 1.首先需要去下载blenderproc的源码blenderproc,按照作者的readme文件进行编译。 2.其次需要下载bop_toolkit源码,链接如下bop_toolkit 3.说明:blenderproc主要用来生成数据,包括depth,rgb,位姿标签文件(scene_gt.json),bop_toolkit主要用来生成mask和mask_visib,scene_gt_info.json,用于判断物体的可见区域比例,如果遮挡太多考虑去掉。做

qq_43814359的博客 5698

网络爬虫基础总结

网络爬虫基础总结网络爬虫1. 爬虫简介网页结构合理的创建标题,有助于目录的生成2.BeatufulSoup 解析网页3.更多请求/下载方式4.加速你的爬虫5.高级爬虫 这篇文章是对莫烦pyhton爬虫基础课进行一个总结,详细教程大家可以参考学习官网:https://morvanzhou.github.io/tutorials/data-manipulation/scraping/ 网络爬虫 对于网...

时光的博客 2968

车辆TBOX科普 第7次 TBOX技术深度解析:硬件架构与核心组件详解

摘要: TBOX(车载远程信息处理单元)是智能网联汽车的核心组件,承担数据采集、通信连接与安全交互等关键功能。其硬件架构以主控单元为核心,采用ARM架构处理器(如NXP i.MX系列)实现高效能低功耗处理,搭配DDR4/LPDDR5内存保障性能,eMMC/UFS存储确保数据可靠性。设计中需平衡车规级可靠性(AEC-Q100)、EMC兼容性及成本控制,同时集成通信、定位与安全模块。未来趋势聚焦异构计算、先进制程及功能安全(ASIL-D)与信息安全融合,推动TBOX向边缘计算节点演进。该技术是汽车智能化转型的重

IT深耕十余载,大道之简 861

Linux下基于AHCI controller模块实现SATA Platform驱动附代码详细流程

本文主要是针对ARM A55集成了AHSATA controller模块开发sata驱动,通过Platform的形式在linux识别到SSD,本文详细讲述整个开发过程,同时对SATA Platform驱动进行讲解。1、配置SATA Phy的初始化;2、打开SATA Platform相关编译开关;3、配置设备树;4、linux启动识盘。

Luckiers的博客 2497

网络爬虫基础

例如,通过爬虫持续抓取纽交所、纳斯达克、港交所等平台的股票价格、成交量、市盈率等实时数据,结合历史数据进行对比分析,构建价格波动模型。借助这些模型,投资者可以预测股票走势,把握投资时机,优化投资组合。网络爬虫技术凭借高效的数据抓取能力,深度渗透到金融业务的各个环节,从市场动态监测到风险精准把控,都离不开它的助力。通用网络爬虫,又称全网爬虫,旨在从互联网上尽可能多地抓取网页信息,覆盖各种类型和主题的网站。),在问题1的基础上,获取每部电影的导演、编剧、主演、类型、上映时间、片长、评分人数以及剧情简。

yusupali19的博客 1079

SAP资产模块(FI-AA)与总账(FI-GL)数据不一致是财务顾问和会计人员最常遇到的棘手问题之一

SAP资产模块(FI-AA)与总账(FI-GL)数据不一致问题主要源于四大原因:1)违规手工记账(最常见),直接通过总账录入资产科目凭证而未通过资产模块;2)折旧运行问题,包括执行失败、跨年度问题或配置冲突;3)主数据与配置错误,如科目确定或折旧键设置不当;4)业务流程遗漏,如单据未生成凭证或汇率差异。解决方案包括运行对账报表、检查凭证来源、补跑折旧及核对配置。关键预防措施是坚持"资产模块发起→自动生成凭证→总账审核"的标准流程。

金牌架构师 428

Python3网络爬虫开发--爬虫基础

爬虫基础

2302_80755459的博客 2905

36 Agent Memory:如何让智能体记住该记的东西

Agent 会调用工具,只能说明它有了行动能力。要让它跨会话、跨任务持续工作,还需要一套可治理的 Memory 系统。本文讲清上下文窗口、RAG 和 Agent Memory 的区别,以及工作记忆、情景记忆、语义记忆、程序记忆该如何分层设计。

老于的笔记的专栏 89

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

学 Java 网络爬虫,需要哪些基础知识?

说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少。有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬虫而且还能做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如 webmagic 。我的第一份正式工作就是使用 webmagic 编写数据采集程序,当时参与了一个舆情分析系统的开发,这里...

平头哥的技术博文 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

网络爬虫理论基础

网络爬虫理论基础

Deng872347348的博客 1181

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

python网络爬虫基础知识

python网络爬虫与信息提取 1、目标 掌握定向网络数据爬取和网页解析的基本能力 the website is the API (将网站作为API获得自己想要的数据) 2、学习过程 (1)、requests库 自动爬取HTML页面,自动向网络提交请求 (2)、robots.txt 网络爬虫排除标准 (3)、Beaytiful Soup库 解析HTML界面和信息内容, (4)、Projects实...

weixin_42515907的博客 2001

Python网络爬虫基础指南

本文介绍了如何使用Python编写一个简单的网络爬虫,从基本结构到异常处理,再到异步请求。实际开发中,可能需要考虑更多因素,如防反爬虫机制、数据清洗与存储、多线程/多进程等。希望这篇文章能帮助你入门Python网络爬虫,并激发你进一步探索的兴趣。

运维人生 1355

网络爬虫基础知识

网络爬虫(Web Crawler 或 Spider)是一种自动化程序,用于在互联网上自动获取信息。它可以从一个或多个初始网页开始,读取网页内容,找到其中的链接,再通过这些链接找到下一个网页,如此循环,直到抓取完所有目标网页。

浪里个狼游记 1387

Python 网络爬虫技术:从基础概念到实战案例

vscode是一个微软开发的优秀的代码编辑器。vscode可以安装各种插件来拓展它的功能,安装jupyter相关的插件可以让我们在vscode中运行ipynb类型的文件。这个爬虫脚本实现了对车质网新能源汽车销量数据的爬取和存储功能。主要使用了 requests 获取网页内容,BeautifulSoup 解析 HTML,pandas 处理数据,以及 sqlalchemy 连接 MySQL 数据库。

H188693的博客 1743
上一篇: python的函数
下一篇: re正则模块
Are you ready
博客等级 码龄8年 312粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值