python爬虫基础知识

news2024/12/25 2:33:59

使用python进行网络爬虫开发之前,我们要对什么是浏览器、什么HTML,HTML构成。请求URL的方法都有一个大概了解才能更清晰的了解如何进行数据爬取。

什么是浏览器?

网页浏览器,简称为浏览器,是一种用于检索并展示万维网信息资源的应用程序,这些信息资源可为网页,图片,影音或其他内容,它们由统一资源标志符标志。

浏览器是网页运行的平台,常用的浏览器有IE、火狐(Firefox)、谷歌(Chrome)、Safari和Opera等。我们平时称为五大浏览器。

不同浏览器的内核是不同的,内核负责对网页中代码的解析与渲染。同一份网页代码,在不同的内核中可能会有不同的效果。如一些网页在Chrome中可以正常打开,但在IE中却无法正常显示。

什么是网页

网页是由HTML,CSS,Javascript构成的纯文本文件。存储在各地机房的web服务器中,文件扩展名一般是.htm或.html。一般通过浏览器来阅读。

什么是HTML

超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器来解析。

HTML 标签是由尖括号包围的关键词,比如

HTML标签通常是成对出现的,比如

开始和结束标签也被称为开放标签和闭合标签


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>网页</title>
</head>
<body>

<h1>我的第一个标题</h1>

<p>我的第一个段落。</p>

</body>
</html>

简单的Python爬虫示例

通过requests.get方法获取网页内容。fake_useragent.UserAgent().random伪装访问服务器网页的客户端浏览器类型、版本等。


pip install requests
pip install fake_useragent
pip install lxml

import requests
import fake_useragent
import  lxml

# 获取url
url = 'https://www.runoob.com/html/html-tutorial.html'

# UA 伪装  你不能顶着我是python爬虫包的名义去爬网站
head = {
    # "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0"
    "User-Agent": fake_useragent.UserAgent().random
}

# 发送请求
response = requests.get(url, headers=head)

# 获取相应的数据
res_text = response.text

print(res_text)

response.close()

在这里插入图片描述

GET/POST请求方法

我们可以通过chrome浏览器查看GET和POST请求的数据。如果你是开发人员也可以通过Postman这种API调试工具去获取模拟请求。
在这里插入图片描述
在这里插入图片描述
GET请求比较简单,但POST请求,我们要向web服务器发送一些污染数据,这个时候网站一般需要用户登录或者申请API获取授权才能操作。

比如我们要用到百度翻译的话,要去百度翻译云申请开发者账号和服务。然后通过类似下面的Post方法传递数据并请求方法。


import requests
import random
import json
from hashlib import md5

API_URL = 'http://api.fanyi.baidu.com/api/trans/vip/translate'


def translate_text(query, from_lang="en",to_lang="zh"):
    appid = '你申请的appid'
    appkey = '你申请的秘钥'
    
    salt = random.randint(32768, 65536)
    signstr = appid + query + str(salt) + appkey
    sign = md5(signstr.encode("utf-8")).hexdigest()

    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    payload = {'appid': appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign}

    # Send request
    r = requests.post(API_URL, params=payload, headers=headers)
    return  r.json()
    

result = translate_text(entext)
print(json.dumps(result, indent=4, ensure_ascii=False))
txt = result['trans_result'][0]['dst']
print(txt)

Xpath的基础学习

下面是一段HTML代码,把代码保存为test.html文件。


<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>测试</title>
  </head>
  <body>
    <div>
      <p>测试1</p>
    </div>
    <div class="user">
      你好
      <p>小林</p>
      <p>小王</p>
      <p>小赵</p>
      <p>小含</p>
      <a href="http://www.user.com/" title="人物" target="_self">
        <span>this is span</span>
                a 标签内容
            </a>
      <a href="" class="du">du a 标签</a>
      <img src="http://www.baidu.com/meinv.jpg" alt="" />
    </div>
    <div class="content">
      <ul>
        url列表内容
        <li>
          <a href="http://www.ulli.com" title="qing">
            baidu li 列表
          </a>
        </li>
        <li>
          <a href="http://www.ulli1.com" title="qin">
            163 li 列表
          </a>
        </li>
        <li><a href="http://www.ulli2.com" alt="qi">li a 内容</a></li>
        <li><a href="http://www.ulli3.com" class="du">li a class du 内容1</a></li>
        <li><a href="http://www.ulli4.com" class="du">li a class du 内容2</a></li>
        <li><b>li b 1</b></li>
        <li><i>li b 2</i></li>
        <li><a href="http://www.ulli5.com" id="feng">li a id feng 1</a></li>
      </ul>
    </div>
  </body>
</html>

我们可以根据html代码的标签、属性、定位获取标签的信息。


from lxml import etree

tree = etree.parse("./test.html")

# xpath 返回的数据都是列表
# 寻找测试1对应的p标签
# 会寻找符合规则的所有标签
print(tree.xpath("/html/body/div/p"))

print("寻找第一个div标签下的数据  索引从1开始 索引定位")
print(tree.xpath("/html/body/div[1]/p"))

# 两个p标签
# 属性定位   @attr(class、id) = 'xxx'
print(tree.xpath("/html/body/div/p[1]"))
print(tree.xpath("/html/body/div[@class='user']/p[1]"))
print(tree.xpath("/html/body/div[@class='content']/ul/li[1]/a"))
# / 表示一个层级目录  // 表示多个层级目录 一般和属性定位配合使用  不限制后面的使用
print(tree.xpath("//div[@class='content']/ul/li[1]/a"))
print(tree.xpath("//div[@class='contnet']/ul/li"))

# 取标签下的文本值 /text() 该标签下的直系文本内容  //text() 该标签下的所有文本内容
print(tree.xpath("/html/body/div[1]/p/text()")[0])
print(tree.xpath("/html/body/div[@class='user']//text()"))
# 读取属性值  /@attr
print("读取属性信息")
print(tree.xpath("//div[@class='content']/ul/li[3]/a/@href")[0])

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

二进制求和

这篇文章会收录到 : 算法通关村第十三关-白银挑战数字与数学高频问题-CSDN博客 二进制求和 描述 : 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 题目 : LeetCode 67.二进制求和 : 67. 二进制求和 分析 : 这个题也是用字符串来表示数据的…

qt 5.15.2压缩和解压缩功能

qt 5.15.2压缩和解压缩功能 主要是添加qt项目文件.pro内容&#xff1a; 这里要先下载quazip的c项目先编译后引入到本项目中/zip目录下 INCLUDEPATH ./zip CONFIG(debug, debug|release) {win32:win32-g: PRE_TARGETDEPS $$PWD/zip/libquazipd.awin32:win32-g: LIBS -L$$PWD…

nginx部署多个vue或react项目

下载nginx(tar.gz) nginx: download(官方地址) 部署nginx # 进入nginx压缩包所在目录 cd /usr/nginx# 解压 tar -zxvf nginx-1.25.3.tar.gz# 安装nginx的相关依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel# 生成Makefile可编译文件 cd /usr/ng…

SSM校园组团平台系统开发mysql数据库web结构java编程计算机网页源码eclipse项目

一、源码特点 SSM 校园组团平台系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模…

11-30 JavaWeb

修改与删除操作 防止空指针异常 localhost:8080 -> 分页查询 修改流程&#xff1a;(先查后改(两个servlet)) 修改&#xff1a; 传用户id(用户id怎么得到 -> 循环一次得到一个user 对象 user对象里用user.getId()得到用户id) UpdateUserQueryServlet.java &#xff08;…

Linux系统的常见命令十一,文本编辑器(vi和vim)

目录 vi命令vim命令vi命令与vim命令的区别 本文主要介绍Linux系统的文本编辑器命令vi和vim&#xff0c;还有它们之间的区别。 vi命令 vi是Linux和其他类Unix操作系统中最常用的文本编辑器之一&#xff0c;它的功能强大且灵活&#xff0c;可以通过键盘快捷键来完成大量的编辑操…

TZOJ 1387 人见人爱A+B

答案&#xff1a; #include <stdio.h> void time(int ah, int am, int as, int bh, int bm, int bs, int* sum_h, int* sum_m, int* sum_s) //不需要返回值所以定义void函数&#xff0c;前面6个为输入&#xff0c;然后用指针存给后面三个 {*sum_s (as bs) % 60; …

【办公软件】Outlook启动一直显示“正在启动”的解决方法

早上打开电脑Outlook2016以后&#xff0c;半个多小时了&#xff0c;一直显示这个界面&#xff1a; 解决办法 按WIN R键打开“运行”&#xff0c;输入如下命令&#xff1a; outlook.exe /safe 然后点击“确定” 这样就进入了Outlook的安全模式。 点击“文件”->“选项”-…

ubuntu18.04安装miniconda和mysql

MySQL 1.更新软件包 apt-get update 2.mysql安装 apt-get install mysql-server 3.初始化配置mysql mysql_secure_installation 第一个选项是问你要不要安装密码插件&#xff0c;就是说安装了之后你必须用安全度很高的密码&#xff0c;不安装的话&#xff0c;可以随意设…

6.16二叉搜索树中的搜索(LC700-E)

算法&#xff1a; 二叉搜索树自带顺序&#xff0c;所以不用强调前、中、后序。 调试过程&#xff1a; 原因&#xff1a;初始化变量result时&#xff0c;没有给result赋值 正确代码&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int…

在Spring Boot中使用JavaMailSender发送邮件

用了这么久的Spring Boot&#xff0c;我们对Spring Boot的了解应该也逐步进入正轨了&#xff0c;这篇文章讲的案例也在我们的实际开发中算是比较实用的了&#xff0c;毕竟我们完成注册功能和对用户群发消息&#xff0c;都可以采用到邮箱发送功能&#xff0c;往下看&#xff0c;…

传统算法:使用 Pygame 实现归并排序

使用 Pygame 模块实现了归并排序的动画演示。首先,它生成一个包含随机整数的数组,并通过 Pygame 在屏幕上绘制这个数组的条形图。接着,通过归并排序算法对数组进行排序,动画效果可视化每一步的排序过程。在排序的过程中,程序将数组递归地分成两半,分别进行排序,然后再将…

OpenCV中八种不同的目标追踪算法

引言 目标跟踪作为机器学习的一个重要分支&#xff0c;加之其在日常生活、军事行动中的广泛应用&#xff0c;受到极大的关注。在AI潮流中&#xff0c;大家对于深度学习&#xff0c;目标跟踪肯定都会有过接触了解&#xff1a;在GPU上通过大量的数据集训练出自己想使用的垂直场景…

使用gparted进行ubuntu虚拟机的磁盘扩容(解决gparted无法拖动分区的问题)

在学习内核编译下载linux内核源码的时候&#xff0c;由于源码非常大&#xff0c;下载的时候提示磁盘空间不足&#xff0c;我才意识到刚开始创建虚拟机的时候分配了20GB的空间现在已经快用光了。在VM的设置里可以进行扩容&#xff0c;我扩展到了30GB重启却发现空间并没有加到我使…

JVM类加载与运行时数据区

目录 一、类加载器 jvm类的加载过程 第一阶段&#xff1a;加载 第二阶段&#xff1a;链接阶段 第三阶段&#xff1a;初始化阶段&#xff1a; 双亲委派机制 沙箱安全机制 运行时数据区 栈-Xss1m 堆 TLAB 逃逸分析 方法区 常量池中有什么 StringTable为什么要调整位…

计算机软件的分类

以功能进行分类&#xff0c;计算机软件通常可以分为系统软件和应用软件两大类。 系统软件&#xff1a;系统软件是计算机运行和管理的基本软件&#xff0c;包括操作系统、驱动程序、系统工具和服务程序等。操作系统是系统软件的核心&#xff0c;负责管理计算机的硬件资源、提供用…

亚信科技AntDB数据库完成中国信通院数据库迁移工具专项测试

近日&#xff0c;在中国信通院“可信数据库”数据库迁移工具专项测试中&#xff0c;湖南亚信安慧科技有限公司&#xff08;简称&#xff1a;亚信安慧科技&#xff09;数据库数据同步平台V2.1产品依据《数据库迁移工具能力要求》、结合亚信科技AntDB分布式关系型数据库产品&…

常见智力题汇总

常见智力题汇总 扔瓶子问题扑克牌问题出队问题烧绳子问题赛马问题求出前三名求出前五名 接水问题种树问题硬币问题宝石问题核酸检测问题 笔者最近面试遇到了好几道智力题&#xff0c;这些题目特点就是如果没有见过&#xff0c;很难第一时间思考得到答案&#xff0c;因此笔者面试…

CISO在2024年应该优先考虑七项安全任务

专业安全媒体CyberTalk.org主编Shira Landau日前表示&#xff1a;现代企业的CISO们在2024年必须做出改变&#xff0c;要更多关注于企业整体安全路线图的推进与实现&#xff0c;让网络安全工作与业务发展目标保持更紧密的一致性。 首席信息安全官&#xff08;CISO&#xff09;是…

模拟算法【3】——1419.数青蛙

文章目录 &#x1f365;1. 题目&#x1f96e;2. 算法原理&#x1f361;3. 代码实现 &#x1f365;1. 题目 题目链接&#xff1a;1419. 数青蛙 - 力扣&#xff08;LeetCode&#xff09; 给你一个字符串 croakOfFrogs&#xff0c;它表示不同青蛙发出的蛙鸣声&#xff08;字符串 &…