IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Python爬虫 -> 正文阅读

[网络协议]Python爬虫

1.什么是爬虫
网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略。
2.百度指数:可利用百度指数来查询相关词条的搜索量
天眼查:可查找公司相关信息
3.爬虫的本质:模拟浏览器打开网页,获取网页中我们想要的那部分数据。

关于urllib:
获取网页的两种方式:
1.获取一个get请求

import urllib.request
#获取一个get请求
 response = urllib.request.urlopen("http://www.baidu.com")
 print(response.read().decode('utf-8'))#.decode('utf-8')用utf-8来解码,对获取到的网页源码进行解码

2.获取一个POST请求

#获取一个POST请求
import urllib.parse
 data=bytes(urllib.parse.urlencode({"hello":"world"}),encoding="utf-8")
 response = urllib.request.urlopen("http://httpbin.org/post",data=data)
 print(response.read().decode("utf-8"))

关于超时处理

#超时处理
try:
     response = urllib.request.urlopen("http://httpbin.org/get",timeout=0.01)
     print(response.read().decode("utf-8"))
except urllib.error.URLError as e:
     print("time out!")

可以利用urllib获取个别信息

response = urllib.request.urlopen("http://www.baidu.com")
print(response.status)#显示418说明发现是一个爬虫了
print(response.getheader("Server"))

避免发现是爬虫的方法:将目标网页源代码中的详细信息进行复制传入

#避免发现是爬虫的方法,将网页的User-Agent进行复制
url ="http://www.baidu.com"
headers = {
"User-Agent":" Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.2242 SLBChan/25"
}

req = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(req)
print(response.read().decode("utf-8"))

得到一个指定的URL的网页内容的函数

#得到一个指定的URL的网页内容
def askURL(url):
    head={   #模拟浏览器头部信息,向目标服务器发送消息
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0;WOW64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 92.0.4515.131Safari / 537.36SLBrowser / 8.0.0.2242SLBChan / 25"
    }  #注意:User-Agent之间没有空格
    #用户代理,表示告诉目标服务器,我们是什么类型的机器/浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)
    request = urllib.request.Request(url,headers=head)
    html=""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
        print(html)
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    return html

关于bs4:
1.Tag 标签及其内容:只能获取所找到的第一个内容

from bs4 import BeautifulSoup
#1.Tag 标签及其内容:只能获取所找到的第一个内容
file = open("./baidu.html","rb")
html = file.read()
bs = BeautifulSoup(html,"html.parser")
print(bs.title)
print(bs.a)
print(bs.head)

2.NavigableString 标签里的内容(字符串)

print(bs.title.string)
#2.NavigableString 标签里的内容(字符串)
print(bs.a.attrs)

3.BeautifulSoup 表示整个文档

print(bs.name)
print(bs)

4.Comment 是一个特殊的NavigableString ,输出的内容不包含注释符号

print(bs.a.string)

文档的遍历

print(bs.head.contents)
print(bs.head.content[1])

文档的搜索:
(1)find_all(),查找所有

#字符串过滤:会查找与字符串完全匹配的内容
 t_list = bs.find_all("a")
import re
#正则表达式:使用search()方法来匹配内容
 t_list = bs.find_all(re.compile("a"))
#方法:传入一个函数(方法),根据函数的要求来搜索
 def name_is_exists(tag):
    return tag.has_attr("name")

 t_list=bs.find_all(name_is_exists)
 print(t_list)

2.kwargs 参数

 t_list = bs.find_all(id="head")
 t_list = bs.find_all(class_=True)

3.text参数

 t_list = bs.find_all(text="hao123")
 t_list = bs.find_all(text=["hao123","地图""贴吧"])
t_list = bs.find_all(text = re.compile("\d"))  #应用正则表达式来查找包含特定文本的内容(标签里的字符串)

4.limit参数

t_list = bs.find_all("a",limit=3)

css选择器

t_list = bs.select("title)   #通过标签来查找
t_list = bs.select(".mnav")    #通过类名来查找
t_list = bs.select("#u1")   #通过id来查找
t_list = bs.select("a[class]='bri']")   #通过属性来查找
t_list = bs.select("head > title")   #通过字标签来查找
t_list = bs.selct(".mnav~.bri")
ptint(t_list[0].get_text())
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-06 16:25:55  更:2022-04-06 16:28:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:49:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码