热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

爬虫——day03

最好的建议,是将图片之类的保存在一个文件夹中所以可以进行以下操作 思路如下   Xpath解析再xml文档中搜索内容的一门语言html是xml的一个子集  被

最好的建议,是将图片之类的保存在一个文件夹中

所以可以进行以下操作

 

思路如下

 

 

 

Xpath解析

再xml文档中搜索内容的一门语言

html是xml的一个子集

 

 被包含的是包含的子节点,包含的是被包含的父节点,同级之间为兄弟节点

 

需要使用lxml模块

 

 

 

 网上随便找的xml可能用不了,因为xml只能有一个根目录,没有就自己套一个

xpath并不会直接弹出,但是也可以写出来并使用

 

 /*/可以理解为任意孙节点中包含nick的

 

 最后一句相对于寻找book中所有包含有nick/text()的

 

错误代码:

Opening and ending tag mismatch:

 

 绿色部分为解决方法,原因是:该方法默认使用的是“XML”解析器,所以如果碰到不规范的html文件时就会解析错误

 

 

使用xpath需要注意相对查找这种东西,应用场景是从中获取一定的路径时

 

 利用xpath获取属性值

 

进行 相应的筛选,xpath中所有的索引号是从1开始的

 

 

 

使用xpath的原因之一,是可以偷懒

 

 

实战:猪八戒网

没学明白

 

 

正常来说,一个网站内的id是不能够重复的

 

 

request进阶:

1.模拟浏览器登录->处理COOKIE

2.防盗链处理->抓取梨视频数据

3.代理->防止被封IP(尽量少用,灰色地带)

COOKIE的作用,处理那些登录前后显示不同界面的网站

 

 实战,获得17K小说网的阅读记录

需求:

 

 由于需要操作联系,使用session,一连串的请求,在这个过程中COOKIE不会消失

session的作用是获得会话

 

 

 

首先,找到传输账号密码的网站

 先让自己能够登录

 

 然后,找到包含书架信息的url

此时不应该直接用get,因为这个新的get是不知道刚才登录后的本机的COOKIE的,所以要用session

 

 具体操作如上

当让也可以直接用request

 

 

爬取梨视频

通过F12可以发现视频链接,但是,在视频源代码中却找不到视频链接,所以可以推断出,视频链接是后期通过二次加载的形式放进网页的,所以认定为电脑使用了反爬机制

F12看到的网页代码是实时的

所以,开启抓包,刷新网页,选择xhr,看看能得到什么

 

 但该url却不能设置为视频,所以进行比较

 

 可以认定为是对传到的链接进行了一次加工

 

防盗链:

如果要打开一个页面,那理所当然的应该打开其之前一个页面,但是爬虫会直接访问后一个页面,所以,会被检测出来,于是,需要在request中的header里,加入需要的refer

 

从json中获取想要的东西

 

 

像这样的具有防爬虫机制的网页,需要找到该网页所想要获得资源和原网页拥有的联系,然后替换后找到原网页

 

很多时候F12得到的页面和网站源代码的内容是不匹配的

 

 

代理:

具有法律边界问题,一般情况下不建议使用

原理是,通过第三方的机器去发送请求

因为有些网站,如果发现请求次数很多的时候,会封你IP

代理相当于还是你去请求,但是你每次换一个IP去做你想做的事情

 

 

使用步骤,

1,先写出一个正常的爬虫

2,找到想要使用的代理IP

代理IP格式:代理IP:端口号

常说的透明的好用

 

 

 

 

综合实战:

抓取网易云热评

像网易云这样的大公司,在网易云的网页版中可以发现,能找到两套源代码

因为那个大网页是由多个小网页嵌套在一起的

 

 

 

 

 在这个抓包到的东西中可以发现,真实数据已经被加密了

 

 需求如上

 

这时,需要我们考虑,如何才能获得未加密的参数,如何获得加密过程,由于是post,所以,这些参数都是在本机(浏览器上进行相应操作的)

是在启动器/Initator可以看到,顺序是从下往上

 

 

从最后一个开始看(数据在这一层被上传到网易服务器)

 

 由于是发送了东西,我们也就想要找到我们想要的网页里面的get

 

 

 第一个send里面没有

 不断执行断点,直到内容中出现我们想要的为止

 

 

 

 找到了data,开始往回看

 

回看是看启动器里面的下一个启动器,看参数是在那一层被加密的‘

 

 可见,我们的参数在进入这一层之前都是正常的

 

 所以可以认为,代码在是在这一层被加密的

 

在该方法中施加断点,然后每次一步,看看是在哪一步进行加密的

 

 按这个方式,找到最后的原始数据(下一步就进行加密)

 

 

 

 

 经过以上分析,可以得出最初始的参数是

 

 是经过函数

 

 才变成

 

 的,到此为止,我们已经能成功找到原始数据,接下来,我们需要处理加密过程

 

 通过加密函数名,我们找到了加密函数的原始位置

第一项是数据,也就是data

第二项在命令行中操作后得到010001

 

 第三项也是给定值

 

 第四项也是定值

 

 知道了这些值的含义以后,打开复制下加密的程序代码,理解并对该代码使用python重构

只需要构建有用的

放开思路,很多时候,如果一个参数的输入为一个随机数,那结果也一定是随机,但如果把这个随机值定死,那么,这个结果也是固定的

 

 根据之前已知,efg是固定的定值,所以,如果i也是定值(c中并没有随机值)那么encSecKey的值就是固定的(神来之笔)

再看entext

 

 

使用了AES加密

可以使用

 

 由于要对加密后的东西进行编码需要引入一个新的库

 

 最后重构出的如图所示:

由于需要对加密出来的东西进行传送,需要对其进行编码,步骤如上

 

 

运行即可得到当前歌曲的信息

 经过我修改之后,现在只需要输入歌曲网站地址,就能得到热门评论。

 

import requests

from Crypto.Cipher import AES

from base64 import b64encode

import json

import re



domain=input("请输入歌曲网站的url:  ")

url='https://music.163.com/weapi/comment/resource/comments/get?csrf_token='

sOngID=str(domain).split('=')[1]

data={

    "csrf_token": "",

    "cursor": "-1",

    "offset": "0",

    "orderType": "1",

    "pageNo": "1",

    "pageSize": "20",

    "rid": "R_SO_4_"+songID,

    "threadId": "R_SO_4_"+songID

}


def get_params(data):

    first=enc_params(data, g)

    secOnd=enc_params(first, i)

    return second


def enc_params(data,key):

    iv="0102030405060708"

    data=to_16(data)

    aes=AES.new(key=key.encode('utf-8'),IV=iv.encode('utf-8'),mode=AES.MODE_CBC)

    bs=aes.encrypt(data.encode('utf-8'))

    return str(b64encode(bs),'utf-8')


def to_16(data):#由于aes加密的要求,需要这么做

    pad=16-len(data)%16

    data+= chr(pad)*pad

    return data


e='010001'

f='00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'

g='0CoJUm6Qyw8W8jud'

i='yRb6vQKULFtYpStG'

encSecKey="8e71223d1f141eaa3b17f68d3028cf9a5e910a8f0e2e4b21b7b14e6f7ae4f6bc95f494f526bf79e3ef823afe6785c0ca646ffb795a2996cc4652a2c88e75746ce80d74aff4f8a5bac0ce8d502fae35e575607573e59fa6cf1e65d9ba781fa3fc66a1806c62b5f47ba0847a2666ff15f471cc83b9086a698c7365274a1438e008"


resp=requests.post(url,data= {

    "params":get_params(json.dumps(data)),

    "encSecKey":encSecKey

})


key1=re.compile(r'"content":"(?P.*?)","status"',re.S)

key0=re.compile(r'"hotComments":(?P.*?):null}]}}',re.S)

abc=key0.search(resp.text)

abc=key1.finditer(abc.group())


with open('file.txt',mode='w')as f:

    for i in abc:

        f.writelines(i.group('get'))

        f.writelines('\n')

 

如上



推荐阅读
  • onenote导入html文件,如何将Word导入到onenote?
    回答:将VISIO软件来中的图片导入到Word应用源程序的方法如下:1、通过桌面快捷方式或搜索来打开Word文档。并在随后打开的界面右侧点击“空白文档” ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了一些好用的搜索引擎的替代品,包括网盘搜索工具、百度网盘搜索引擎等。同时还介绍了一些笑话大全、GIF笑话图片、动态图等资源的搜索引擎。此外,还推荐了一些迅雷快传搜索和360云盘资源搜索的网盘搜索引擎。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
author-avatar
胡慧君孟勋欣怡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有