当前位置: 首页>前端>正文

python 爬虫 网页F12弹出新窗口 python网页爬虫案例

1.网络爬虫的一些概述过程

正常的浏览器浏览网页过程是:
1.发起Http请求,服务器收到后,返回html代码。
2.浏览器解析html代码,将相应的节点效果展示在UI上,需要下载的二级资源浏览器会去下载。

爬虫:
1.伪装浏览器(headers-User-Agent)
2.访问网站,获得服务器返回的html数据(注意:控制访问的频率,如果访问网页过多可能会封IP)
------------------下面的需要一些前端的知识-------------------
3.解析HTML节点,获得需要的数据或图片的链接
4.下载整理数据

2.手动爬虫

python中手动爬虫比较麻烦,首先先在进入pycharm(执行Python的app)
file -> setting -> project: 项目名 -> project Interpreter -> + ->分别搜索requests和lxml ->stall requests和lxml
安装上requests和lxml模块。

【手动爬虫(了解)】
了解手动解析爬虫的原理。
问题:
(1)不同的页面,需要进行单独的分析和解析。
(2)有的网站是反爬虫的,很难进行解析
(3)网站返回的HTML格式可能随时在变,需要重新解析新的格式

代码如下:
#可以进行http请求
import requests
#解析html
from lxml import etree
#引入时间模块
import time

#准备一个浏览器信息
headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36’
}

index = 1

def get_url(url):
“”"
这个函数是获得服务器返回并解析
:param url: 要解析的地址
:return: 无
“”"
# 执行网络请求
res = requests.get(url, headers=headers)
# 返回数据后进行解析(对应不同的网站,解析的步骤也是不同的,需要手动去分析网站网站返回的HTML数据)
html = etree.HTML(res.text)
infos = html.xpath(’//ul[@class=“note-list”]/li’)
for info in infos:
root = ‘https://www.jianshu.com’
url_path = root + info.xpath(‘div/a/@href’)[0] # 解析出的图片的数据
print(url_path)
# 下载 url_path 对应的图片
get_img(url_path)
# 防止解析过快
time.sleep(3)

def get_img(url):
“”"
通过图片的连接下载到本地
:param url: 图片的连接
:return: 无
“”"
res = requests.get(url, headers=headers)
html = etree.HTML(res.text)
infos = html.xpath(’//div[@class = “image-package”]’)
for info in infos:
try:
img_url = info.xpath(‘div[1]/div[2]/img/@data-original-src’)[0]
print(img_url)
data = requests.get(‘http:’ + img_url, headers=headers)
# 拼接文件名
global index
index = index + 1
file_name = str(index)
for i in range(6 - len(file_name)):
file_name = ‘0’ + file_name

#使用文件流输出图片
#此代码将图片存储在项目的根目录下的row_img文件夹中
fp = open(‘row_img/’ + file_name + ‘.jpg’, ‘wb’)
fp.write(data.content)
fp.close()
except OSError:
pass

#主函数
if name == 'main:
urls = [‘https://www.jianshu.com/c/bd38bd199ec6?order_by=added_at&page={}’.format(str(i)) for i in
range(1, 3)] # 1到20页
for url in urls:
get_url(url)

3.自动爬虫

自动爬虫(爬取图片)
icrawler模板一般是没有的,需要到setting-> project Interpreter 中去安装下载。
实例:
#导包,这里使用的是百度图片引擎
#导包可以导入其他引擎如火狐谷歌等,只需要导入相应的包就行,这些引擎都在builtin中。
from icrawler.builtin import BaiduImageCrawler

#设置图片存储路径
baidu_storage = {‘root_dir’ : ‘F:/BaiduImage/img’}

#设置图片下载爬虫的参数
#参数parser_threads:解析HTML的线程数
#参数downloader_threads:下载数据的线程数
#参数storage:图片存储路径
baidu_crawler = BaiduImageCrawler(parser_threads=2,downloader_threads=4,storage=baidu_storage)

#开始爬取
#参数keyword:关键字 这里的关键字可以填写你想填写的。
#参数max_num:最大数量
baidu_crawler.crawl(keyword=‘胡歌’,max_num=20)

以上结果实例【自动爬虫(本次项目使用)】
实际上就是别人手动解析好了结果,我们只需要调用起封装的库,获取结果即可。

4.人脸识别颜值系统

【百度人脸识别算法库】
AipFaceAipFace是人脸识别的Python SDK客户端,为使用人脸识别的开发人员提供了一系列的交互方法。
下面有个链接地址是百度智能云的人脸识别地址。
链接地址:https://cloud.baidu.com/doc/FACE/s/1k25rd9rt
进入之后,最好注册一个账户(这个账户就是百度、百度云账户),服务器可以进行流量管理。

1.注册,登录
2.在已开通服务中找到人脸识别,先要创建一个应用,百度云为这个应用分配独立的账号( 主页面中在 百度智能云–管理中心中找到界面),第一次请点击“创建应用”,输入相关的信息后,百度审核通过。
3. 进入“管理中心”,找到已经创建的应用。保存个人的AppID、API Key、Secret Key。(这3个后面需要很重要!)
4.在pycharm的project Interpreter去下载库 baidu-aip(注意还有一个api不要选错了)
5.新建一个AipFace对象
下面是人脸识别 - > 历史版本 ->python语言提供的一些参考。
可参考 https://cloud.baidu.com/doc/FACE/s/tk3co84sn
如下图:

python 爬虫 网页F12弹出新窗口 python网页爬虫案例,python 爬虫 网页F12弹出新窗口 python网页爬虫案例_百度,第1张

代码如下:

from aip import AipFace

“”" 你的 APPID AK SK ,注意上面创建应用的APPID,AK,SK这里就用到了"""
APP_ID = ‘你的 App ID’
API_KEY = ‘你的 Api Key’
SECRET_KEY = ‘你的 Secret Key’

client = AipFace(APP_ID, API_KEY, SECRET_KEY)

6.Base64编码
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。

在线文档的v2版本直接使用byte数据演示,但是python3需要转BASE64。因此转码过程百度在线文档没有在SDK演示的首页提出。

具体的怎么将文件 转变为 BASE64呢?
下面代码可以实现:
import base64 #python自带不需要安装
def get_file_content(filePath):
‘’’
文件转Base64编码
:param filePath: 文件路径
:return: 转换后的Base64代码
‘’’
file = open(filePath, ‘rb’)
data = file.read()
content = base64.b64encode(data)
file.close()
base = content.decode(‘utf-8’)
print(‘转换后的base64:’, base)
return base

7.AipFace 接口调用

输入参数:https://cloud.baidu.com/doc/FACE/s/tk3co84sn

上面网站中有一个参数为: face_fields 这个参数的功能是要分析哪些数据 (这里是字典的格式因此要在代码中写一个字典,包含要分析的数据)

调用API的网址:https://cloud.baidu.com/doc/FACE/s/tk3co84sn client.detect(img, “BASE64”, options)

8. 结果分析

python 爬虫 网页F12弹出新窗口 python网页爬虫案例,python 爬虫 网页F12弹出新窗口 python网页爬虫案例_百度_02,第2张

返回值是字典 如果error_code不为0,说明调用有错误,错误信息如上图。

上面所有代码如下:

from aip import AipFace

import base64

“”" 你的 APPID AK SK “”"
APP_ID = ‘19246637’
API_KEY = ‘9Lh3SFU10fHzsdwyAIqM4LOf’
SECRET_KEY = ‘5UMmqAKYUSXK1WgG8vNfdwvxVEw0UTDc’

def get_file_content(filePath):
‘’’
文件转Base64编码
:param filePath: 文件路径
:return: 转换后的Base64代码
‘’’
file = open(filePath, ‘rb’)
data = file.read()
content = base64.b64encode(data)
file.close()
base = content.decode(‘utf-8’)
print(‘转换后的base64:’, base)
return base

#main主函数
if name == ‘main’:
client = AipFace(APP_ID, API_KEY, SECRET_KEY)
img = get_file_content(“1.jpg”)
#准备一个字典,填写对应的参数。(注意face_field和face_fields)
options = {“face_fields”: “age,beauty,expression”}
#调用人脸分析接口
#参数img是对应的图片
#参数“BASE64”
#参数options检测参数选项
result = client.detect(img, “BASE64”, options)
print(type(result))
#打印结果内容
#如果error_code不为零说明有错误,而错误信息在刚刚的参考网址中有找一找就能看到
print(result)



https://www.xamrdz.com/web/2tv1925838.html

相关文章: