Python爬虫零基础实战,简洁实用!

news2024/11/27 4:19:12

1.爬虫简介

简单来讲,爬虫就是一个探测机器,它的基本操作就是模拟人的行为去各个网站溜达,点点按钮,查查数据,或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。

你可以简单地想象:每个爬虫都是你的“分身”。就像孙悟空拔了一撮汗毛,吹出一堆猴子一样。

你每天使用的百度,其实就是利用了这种爬虫技术:每天放出无数爬虫到各个网站,把他们的信息抓回来,然后化好淡妆排着小队等你来检索。
抢票软件,就相当于撒出去无数个分身,每一个分身都帮助你不断刷新 12306 网站的火车余票。一旦发现有票,就马上拍下来,然后对你喊:土豪快来付款。

  互联网就像一张网,中间以各种链接连接在一起,而小小的爬虫却能在这张网上欢快的驰骋,代替人来进行很多繁重的任务,如抢票软件、某度搜索引擎。

2.为什么用python做网页爬虫

  python作为一门易上手的语言,提供了丰富的API来抓取网页文档、模拟浏览器行为、对抓取到的数据进行处理。后面我们的演示中也会展示python爬虫的简介,爬取网页内容的核心代码可能只有短短几行,却能实现强大的功能。

3.python环境配置

  对于新手来说,最熟悉的还是windows环境。我使用的是anaconda+pycharm进行python代码的编写,这里anaconda方便进行外部库的管理,而pycharm也是功能强大很流行的一款IDE。

4.我需要了解哪些python爬虫的前置知识

  至少会一点python的基础知识,如果不清楚的话,可以参加浙大翁恺的python慕课,或者自己找些介绍文档,如       python入门教程。同时需要了解关于html的一些基础知识,比如各种标签代表的含义:

<!–…–>:定义注释
<!DOCTYPE> :定义文档类型
<html>:html文档的总标签
<head>:定义头部
<body>:定义网页内容
<script>:定义脚本
<div>:division,定义分区,容器标签
<p>:paragraph,定义段落
<a>:定义超链接
<span>:定义文本容器
<br>:换行
<form>:定义表单
<table>:定义表格
<th>:定义表头
<tr>:表的行
<td>:表的列
<b>:定义粗体字
<img>:定义图片

  熟悉上面这些html标签将会方便我们进行正则表达式的处理,以及xPath和BeautifulSoup的学习。

5. 关于正则表达式

  python正则表达式相关知识较多,我们只需要了解一些基础的即可,如:

    python正则表达式 菜鸟教程

    python正则表达式官方文档

6.提取网页内容并用正则表达式处理  

import re
import urllib.request
import chardet

response=urllib.request.urlopen("http://news.hit.edu.cn/")#输入参数为你想爬取的网页URL

html=response.read() #读取到html变量中
chardet1=chardet.detect(html) #获取编码方式
html=html.decode(chardet1['encoding']) #按照获取到的编码方式进行处理

   这里我们以某高校的官方新闻网站为例演示来进行python爬虫操作,上面短短的几行代码就实现了将网页内容爬取到本地的操作。

  接着就是对爬取到的内容进行正则表达式处理,得到我们想要获取的内容,观察网页源代码:

  

我们希望对其中的外部链接进行匹配,由之前了解到的正则表达式知识,实现如下:

mypatten="<li class=\"link-item\"><a href=\"(.*)\"><span>(.*)</span></a></li>"
mylist=re.findall(mypatten,html)
for i in mylist:
    print("外部链接地址:%s 网站名:%s" %(i[0],i[1]))

最后得到的效果是:

7.xPath和BeautifulSoup工具简介

  除了用正则表达式处理得到的网页文档之外,我们还可以考虑网页自身的架构。

XPath,全称 XML Path Language,即 XML 路径语言,它是一门在XML文档中查找信息的语言。XPath 最初设计是用来搜寻XML文档的,但是它同样适用于 HTML 文档的搜索。

  nodename选取此节点的所有子节点
  /从当前节点选取直接子节点
  //从当前节点选取子孙节点
  .选取当前节点
  ..选取当前节点的父节点
  @选取属性

  在这里列出了XPath的常用匹配规则,例如 / 代表选取直接子节点,// 代表选择所有子孙节点,. 代表选取当前节点,.. 代表选取当前节点的父节点,@ 则是加了属性的限定,选取匹配属性的特定节点。

from lxml import etree
import urllib.request
import chardet
response=urllib.request.urlopen("https://www.dahe.cn")

html=response.read()
chardet1=chardet.detect(html)
html=html.decode(chardet1['encoding'])
etreehtml=etree.HTML(html)
mylist=etreehtml.xpath("/html/body/div/div/div/div/div/ul/div/li")

BeautifulSoup4是爬虫必学的技能。BeautifulSoup最主要的功能是从网页抓取数据,Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快,推荐使用lxml 解析器。

from bs4 import BeautifulSoup 
file = open('./aa.html', 'rb') 
html = file.read() 
bs = BeautifulSoup(html,"html.parser") # 缩进格式
print(bs.prettify()) # 格式化html结构
print(bs.title) # 获取title标签的名称
print(bs.title.name) # 获取title标签的文本内容
print(bs.title.string) # 获取head标签的所有内容
print(bs.head) # 获取第一个div标签中的所有内容
print(bs.div) # 获取第一个div标签的id的值
print(bs.div["id"]) # 获取第一个a标签中的所有内容
print(bs.a) # 获取所有的a标签中的所有内容
print(bs.find_all("a")) # 获取id="u1"
print(bs.find(id="u1")) # 获取所有的a标签,并遍历打印a标签中的href的值
for item in bs.find_all("a"): 
    print(item.get("href")) # 获取所有的a标签,并遍历打印a标签的文本值
for item in bs.find_all("a"): 
    print(item.get_text())

最后:如果你对Python感兴趣,想要学习Python,希望可以帮到你,一起加油!以上是给大家分享的Python全套学习资料,都是我自己学习时整理的: 

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

图片

图片

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,还有环境配置的教程,给大家节省了很多时间。

图片

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

图片

四、入门学习视频全套

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

图片

图片

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

   **学习资源已打包,需要的小伙伴可以戳这里:【学习资料】 

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

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

相关文章

Stream的获取、中间方法、终结方法

1、获取Stream流 单列集合&#xff1a;foreach完整版 双列集合通过Ketset()、entryset() 数组的&#xff1a;通过Arrays Stream流的中间方法&#xff1a;链式编程&#xff0c;原stream流只能使用一次 filter&#xff1a; limit、skip&#xff1a; distinct(有自定义对象需要重写…

MYSQL 四、mysql进阶 6(索引的创建与设计原则)

一、索引的声明和使用 1.1 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说&#xff0c;索引主要有 4 种&#xff0c;分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 &#xff0c;索引可…

计算机网络之令牌总线

上文内容&#xff1a;什么是以太网 1.令牌总线工作原理 在总线的基础上&#xff0c;通过在网络结点之间有序地传递令牌来分配各结点对共享型总线的访问权利&#xff0c;形成闭合的逻辑环路。 完全采用半双工的操作方式&#xff0c;只有获得令牌的结点才能发送信息&#xff…

【matlab 项目工期优化】基于NSGA2/3的项目工期多目标优化(时间-成本-质量-安全)

一 背景介绍 本文分享了一个通用的项目工期优化的案例&#xff0c;决策变量是每个子项目的工期&#xff0c;优化目标是项目的完成时间最小&#xff0c;项目的总成本现值最小&#xff0c;项目的总安全水平最高&#xff0c;项目的总质量水平最高。采用的算法是NSGA2和NSGA3算法。…

YOLOV++ 详解 | 网络结构、代码解析、YOLOV 论文阅读、初识 VID

前言 代码地址&#xff1a;https://github.com/YuHengsss/YOLOV 本文网络结构按 YOLOV SwinTiny 绘制&#xff0c;不同的模型主要差异在于 Backbone&#xff0c;VID 相关的部分基本相同。 Predict Input 代码基于 vid_demo。首先会读取视频中的所有帧&#xff08;只能用短视频…

kafka系列之消费后不提交offset情况的分析总结

概述 每当我们调用Kafka的poll()方法或者使用KafkaListener(其实底层也是poll()方法)时&#xff0c;它都会返回之前被写入Kafka的记录&#xff0c;即我们组中的消费者还没有读过的记录。 这意味着我们有一种方法可以跟踪该组消费者读取过的记录。 如前所述&#xff0c;Kafka的一…

自闭症儿童的治疗方法有哪些?

身为星贝育园自闭症儿童康复学校的资深教育者&#xff0c;我深知自闭症谱系障碍&#xff08;ASD&#xff09;儿童的教育与治疗需要一个全面、个性化的方案。在星贝育园&#xff0c;我们致力于为孩子们提供一个充满爱与理解的环境&#xff0c;采用多种科学验证的教育方法&#x…

【Linux】动态库的制作与使用

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

asp.net公交司机管理系统-计算机毕业设计源码96696

摘 要 公交司机是公交运输系统中的重要组成部分&#xff0c;他们的管理和运营对于公交运输的正常运行和服务质量起着至关重要的作用。本文提出了一种基于C#&#xff08;asp.net&#xff09;的公交司机管理系统。该系统利用计算机技术和网络通信技术&#xff0c;实现了公交司机信…

Ollama:本地大模型运行指南_ollama运行本地模型

Ollama 简介 Ollama 是一个基于 Go 语言开发的可以本地运行大模型的开源框架。 官网&#xff1a;ollama.com/ GitHub 地址&#xff1a;github.com/ollama/olla… Ollama 安装 【一一AGI大模型学习 所有资源获取处一一】 ①人工智能/大模型学习路线 ②AI产品经理入门指南 ③…

【 香橙派 AIpro评测】大语言模型实战教程:香橙派 AIpro部署LLMS大模型实站(保姆级教学)

引言 OrangePi AIpro 这块板子作为业界首款基于昇腾深度研发的AI开发板&#xff0c;一经发布本博主就火速去关注了&#xff0c;其配备的 8/20TOPS澎湃算力是目前开发板市场中所具备的最大算力&#xff0c;可谓是让我非常眼馋啊&#xff01;这么好的板子那必须拿来用用&#xff…

Java面试八股之如何提高MySQL的insert性能

如何提高MySQL的insert性能 提高MySQL的INSERT性能可以通过多种策略实现&#xff0c;以下是一些常见的优化技巧&#xff1a; 批量插入&#xff1a; 而不是逐条插入&#xff0c;可以使用单个INSERT语句插入多行数据。例如&#xff1a; INSERT INTO table_name (col1, col2) V…

用Python轻松转换PDF为CSV

数据的可访问性和可操作性是数据管理的核心要素。PDF格式因其跨平台兼容性和版面固定性&#xff0c;在文档分享和打印方面表现出色&#xff0c;尤其适用于报表、调查结果等数据的存储。然而&#xff0c;PDF的非结构化特性限制了其在数据分析领域的应用。相比之下&#xff0c;CS…

AI时代下 AI搜索成“兵家必争之地”

当下&#xff0c;海量信息爆发性增长&#xff0c;用户的搜索需求也从找不到信息转变成找不到“需要的”信息。不过随着AI技术的迅速发展&#xff0c;这个需求将会得到解决&#xff0c;AI搜索也将成为“兵家必争之地”。 在全球范围内&#xff0c;谷歌作为全球最大的搜索引擎公司…

国衍科技——梅雨季节文物保护专家

尊敬的文物保护者们 随着梅雨季节的脚步渐近&#xff0c;湿润的空气和连绵的雨水不仅为我们的生活带来了不便&#xff0c;更为文物保护工作带来了严峻的挑战。在这个季节&#xff0c;文物发霉的风险急剧上升&#xff0c;每一件珍贵的文化遗产都面临着被时间侵蚀的威胁。然而&am…

使用Mybatis批量插入大量数据的实践

前言 在项目开发过程中&#xff0c;我们经常会有批量插入的需求&#xff0c;例如&#xff1a;定时统计任务 但是受限于MySQL中 max_allowed_packet 参数限制&#xff0c;5.7版本默认值为4M&#xff0c;这显然不太符合我们的需求&#xff0c;当然我们也可以通过修改此值来适应…

ChatGPT如何提升论文写作(附指令集合)

先讲前提&#xff1a; ChatGPT无论是3.5还是4.0都存在非常严重的幻觉问题&#xff0c;目前ChatGPT无法替代搜索引擎。 如果你希望得到更加优质的体验&#xff0c;请用GPT-4.0&#xff0c;幻觉问题上比3.5大幅降低 ChatGPT中文版&#xff0c;一站式AI创作平台​aibox365.com …

昇思MindSpore学习笔记4-01生成式--CycleGAN图像风格迁移互换

摘要&#xff1a; 记录了昇思MindSpore AI框架用循环对抗生成网络模型CycleGAN实现图像匹配的方法、步骤。包括环境准备、数据集下载、数据加载和预处理、构建生成器和判别器、优化、模型训练和推理等。 1.模型介绍 1.1模型简介 CycleGAN(Cycle Generative Adversarial Netwo…

Yolo系列——动态卷积

一、为什么要提出动态卷积&#xff1f; 为了更好的将模型部署在边端设备上&#xff0c;需要设计轻量级网络模型。轻量级卷积网络因其较低的运算而限制了CNN的深度&#xff08;卷积层层数&#xff09;和宽度&#xff08;通道数&#xff09;&#xff0c;限制了模型的表达能力&am…

3dmax全景图用什么渲染软件好?渲染100邀请码1a12

全景图是常见的效果图类型&#xff0c;常用于展示大型空间&#xff0c;如展厅、会议室等。全景图的制作需要渲染&#xff0c;下面我介绍几个常用的渲染软件分享给大家。 1、V-Ray&#xff1a;十分流行的渲染引擎&#xff0c;功能强大&#xff0c;它提供了高质量的光线追踪技术…