浏览器抓取网页

浏览器抓取网页

浏览器抓取网页(,浏览器,页面,句柄,内容指针指针站长站)

网站优化优采云 发表了文章 • 0 个评论 • 80 次浏览 • 2021-11-01 23:00 • 来自相关话题

  浏览器抓取网页(,浏览器,页面,句柄,内容指针指针站长站)
  c#从IE浏览器获取当前页面内容、浏览器、页面、句柄、内容、指针
  c#从IE浏览器获取当前页面的内容
  轻松采集站长网站,站长之家整理c#从IE浏览器获取当前页面的相关内容。
  
private void timer1_Tick(object sender, EventArgs e)
{
lock (currentLock)
{
System.Drawing.Point MousePoint = System.Windows.Forms.Form.MousePosition;
if (_leftClick)
{
timer1.Stop();
_leftClick = false;
_lastDocument = GetHTMLDocumentFormHwnd(GetPointControl(MousePoint, false));
if (_lastDocument != null)
{
if (_getDocument)
{
_getDocument = true;
try
{
string url = _lastDocument.url;
string html = _lastDocument.documentElement.outerHTML;
string cookie = _lastDocument.cookie;
string domain = _lastDocument.domain;
var resolveParams = new ResolveParam
{
Url = new Uri(url),
Html = html,
PageCookie = cookie,
Domain = domain
};
RequetResove(resolveParams);
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
}
}
else
{
new MessageTip().Show("xx", "当前页面不是IE浏览器页面,或使用了非IE内核浏览器,如火狐,搜狗等。请使用IE浏览器打开网页");
}
_getDocument = false;
}
else
{
_pointFrm.Left = MousePoint.X + 10;
_pointFrm.Top = MousePoint.Y + 10;
}
}
}
  第 11 行的 GetHTMLDocumentFormHwnd(GetPointControl(MousePoint, false)) 分解首先从鼠标坐标获取页面的句柄:
  
public static IntPtr GetPointControl(System.Drawing.Point p, bool allControl)
{
IntPtr handle = Win32APIsFull.WindowFromPoint(p);
if (handle != IntPtr.Zero)
{
System.Drawing.Rectangle rect = default(System.Drawing.Rectangle);
if (Win32APIsFull.GetWindowRect(handle, out rect))
{
return Win32APIsFull.ChildWindowFromPointEx(handle, new System.Drawing.Point(p.X - rect.X, p.Y - rect.Y), allControl ? Win32APIsFull.CWP.ALL : Win32APIsFull.CWP.SKIPINVISIBLE);
}
}
return IntPtr.Zero;
}
  接下来,根据句柄获取页面内容:
  
public static HTMLDocument GetHTMLDocumentFormHwnd(IntPtr hwnd)
{
IntPtr result = Marshal.AllocHGlobal(4);
Object obj = null;
Console.WriteLine(Win32APIsFull.SendMessageTimeoutA(hwnd, HTML_GETOBJECT_mid, 0, 0, 2, 1000, result));
if (Marshal.ReadInt32(result) != 0)
{
Console.WriteLine(Win32APIsFull.ObjectFromLresult(Marshal.ReadInt32(result), ref IID_IHTMLDocument, 0, out obj));
}
Marshal.FreeHGlobal(result);
return obj as HTMLDocument;
}
  一般原则:
  
  向IE表单发送消息,获取指向IE浏览器(非托管)的某个内存块的指针,然后根据该指针获取HTMLDocument对象。
  这个方法涉及到win32的两个功能:
  
[System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "SendMessageTimeoutA")]
public static extern int SendMessageTimeoutA(
[InAttribute()] System.IntPtr hWnd,
uint Msg, uint wParam, int lParam,
uint fuFlags,
uint uTimeout,
System.IntPtr lpdwResult);
  
[System.Runtime.InteropServices.DllImportAttribute("oleacc.dll", EntryPoint = "ObjectFromLresult")]
public static extern int ObjectFromLresult(
int lResult,
ref Guid riid,
int wParam,
[MarshalAs(UnmanagedType.IDispatch), Out]
out Object pObject
);
  以上是c#从IE浏览器获取当前页面内容的详细内容。更多关于c#获取浏览器页面内容的信息,请关注eCai站长网站其他相关文章!
  以上是c#从IE浏览器获取当前页面内容的详细介绍。欢迎大家对c#提出宝贵意见,从IE浏览器获取当前页面的内容 查看全部

  浏览器抓取网页(,浏览器,页面,句柄,内容指针指针站长站)
  c#从IE浏览器获取当前页面内容、浏览器、页面、句柄、内容、指针
  c#从IE浏览器获取当前页面的内容
  轻松采集站长网站,站长之家整理c#从IE浏览器获取当前页面的相关内容。
  
private void timer1_Tick(object sender, EventArgs e)
{
lock (currentLock)
{
System.Drawing.Point MousePoint = System.Windows.Forms.Form.MousePosition;
if (_leftClick)
{
timer1.Stop();
_leftClick = false;
_lastDocument = GetHTMLDocumentFormHwnd(GetPointControl(MousePoint, false));
if (_lastDocument != null)
{
if (_getDocument)
{
_getDocument = true;
try
{
string url = _lastDocument.url;
string html = _lastDocument.documentElement.outerHTML;
string cookie = _lastDocument.cookie;
string domain = _lastDocument.domain;
var resolveParams = new ResolveParam
{
Url = new Uri(url),
Html = html,
PageCookie = cookie,
Domain = domain
};
RequetResove(resolveParams);
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
}
}
else
{
new MessageTip().Show("xx", "当前页面不是IE浏览器页面,或使用了非IE内核浏览器,如火狐,搜狗等。请使用IE浏览器打开网页");
}
_getDocument = false;
}
else
{
_pointFrm.Left = MousePoint.X + 10;
_pointFrm.Top = MousePoint.Y + 10;
}
}
}
  第 11 行的 GetHTMLDocumentFormHwnd(GetPointControl(MousePoint, false)) 分解首先从鼠标坐标获取页面的句柄:
  
public static IntPtr GetPointControl(System.Drawing.Point p, bool allControl)
{
IntPtr handle = Win32APIsFull.WindowFromPoint(p);
if (handle != IntPtr.Zero)
{
System.Drawing.Rectangle rect = default(System.Drawing.Rectangle);
if (Win32APIsFull.GetWindowRect(handle, out rect))
{
return Win32APIsFull.ChildWindowFromPointEx(handle, new System.Drawing.Point(p.X - rect.X, p.Y - rect.Y), allControl ? Win32APIsFull.CWP.ALL : Win32APIsFull.CWP.SKIPINVISIBLE);
}
}
return IntPtr.Zero;
}
  接下来,根据句柄获取页面内容:
  
public static HTMLDocument GetHTMLDocumentFormHwnd(IntPtr hwnd)
{
IntPtr result = Marshal.AllocHGlobal(4);
Object obj = null;
Console.WriteLine(Win32APIsFull.SendMessageTimeoutA(hwnd, HTML_GETOBJECT_mid, 0, 0, 2, 1000, result));
if (Marshal.ReadInt32(result) != 0)
{
Console.WriteLine(Win32APIsFull.ObjectFromLresult(Marshal.ReadInt32(result), ref IID_IHTMLDocument, 0, out obj));
}
Marshal.FreeHGlobal(result);
return obj as HTMLDocument;
}
  一般原则:
  
  向IE表单发送消息,获取指向IE浏览器(非托管)的某个内存块的指针,然后根据该指针获取HTMLDocument对象。
  这个方法涉及到win32的两个功能:
  
[System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "SendMessageTimeoutA")]
public static extern int SendMessageTimeoutA(
[InAttribute()] System.IntPtr hWnd,
uint Msg, uint wParam, int lParam,
uint fuFlags,
uint uTimeout,
System.IntPtr lpdwResult);
  
[System.Runtime.InteropServices.DllImportAttribute("oleacc.dll", EntryPoint = "ObjectFromLresult")]
public static extern int ObjectFromLresult(
int lResult,
ref Guid riid,
int wParam,
[MarshalAs(UnmanagedType.IDispatch), Out]
out Object pObject
);
  以上是c#从IE浏览器获取当前页面内容的详细内容。更多关于c#获取浏览器页面内容的信息,请关注eCai站长网站其他相关文章!
  以上是c#从IE浏览器获取当前页面内容的详细介绍。欢迎大家对c#提出宝贵意见,从IE浏览器获取当前页面的内容

浏览器抓取网页(有三种方法能够确定浏览器窗口的尺寸(浏览器的视口))

网站优化优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2021-11-01 15:05 • 来自相关话题

  浏览器抓取网页(有三种方法能够确定浏览器窗口的尺寸(浏览器的视口))
  确定浏览器窗口(浏览器的视口,不包括工具栏和滚动条)大小的方法有三种。
  对于 Internet Explorer、Chrome、Firefox、Opera 和 Safari:
  当浏览器窗口缩小或放大时,1、2、5、6 的值会相应增加或减少;而 3、4 将保持不变。改变。
  使用e.clientX获取当前可视区域的横坐标;使用e.pageX获取整个页面当前元素的横坐标。
  注意:使用 element.getBoundingClientRect();获取元素的宽度、高度和位置信息
  使用 window.screen.height 和 window.screen.width 来获取计算机的分辨率。该值不会随着浏览器窗口而改变。
  实用的 JavaScript 解决方案(涵盖所有浏览器):
  示例
  var w=window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;
var h=window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;
  以上是通过js获取的屏幕高宽,也可以使用jQuery获取,如下:
  $(window).width()==window.innerWidth
  $(window).height()==window.innerHeight
  同时也可以使用jQuery获取DOM(文档对象模型)的高宽如下:
  $(document).width()
  $(document).height()
  父子窗口之间的调用可以看我的博客-《通过js或jQuery实现子窗口与父窗口之间元素、方法、窗口的相互获取》 查看全部

  浏览器抓取网页(有三种方法能够确定浏览器窗口的尺寸(浏览器的视口))
  确定浏览器窗口(浏览器的视口,不包括工具栏和滚动条)大小的方法有三种。
  对于 Internet Explorer、Chrome、Firefox、Opera 和 Safari:
  当浏览器窗口缩小或放大时,1、2、5、6 的值会相应增加或减少;而 3、4 将保持不变。改变。
  使用e.clientX获取当前可视区域的横坐标;使用e.pageX获取整个页面当前元素的横坐标。
  注意:使用 element.getBoundingClientRect();获取元素的宽度、高度和位置信息
  使用 window.screen.height 和 window.screen.width 来获取计算机的分辨率。该值不会随着浏览器窗口而改变。
  实用的 JavaScript 解决方案(涵盖所有浏览器):
  示例
  var w=window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;
var h=window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;
  以上是通过js获取的屏幕高宽,也可以使用jQuery获取,如下:
  $(window).width()==window.innerWidth
  $(window).height()==window.innerHeight
  同时也可以使用jQuery获取DOM(文档对象模型)的高宽如下:
  $(document).width()
  $(document).height()
  父子窗口之间的调用可以看我的博客-《通过js或jQuery实现子窗口与父窗口之间元素、方法、窗口的相互获取》

浏览器抓取网页(行动支援网页剪贴簿支援行动浏览器)

网站优化优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2021-11-01 15:02 • 来自相关话题

  浏览器抓取网页(行动支援网页剪贴簿支援行动浏览器)
  介绍:
  WebScrapBook 可以忠实地检索网页内容,支持多种存储格式和自定义设置,可以对检索到的数据进行检索、组织、注释和编辑。此扩展程序继承自 ScrapBook X,后者是 Firefox 的传统附加组件。
  特征:
  1. 忠实抓取:浏览器显示的网页可以抓取存储,不丢失细节。一些重要的元数据,如来源网址和检索时间也如实记录。
  2. 自定义抓取:网页剪贴簿可以抓取选定范围的网页,抓取网页的原创外观(无需页面脚本处理),或者抓取网页作为书签。您还可以自定义如何处理网页中的图片、音频、视频、字体、框架页、样式表、脚本等资源。网页可以保存为文件夹、ZIP 存档文件(HTZ 或 MAFF)或单个 HTML 文件。
  3. 管理数据:您可以在浏览器的侧边栏中使用一个或多个剪贴簿,将检索到的网页以分层树状结构进行组织。每个剪贴簿都可以单独索引以供将来以各种方式搜索(可以组合全文关键词、标题、自定义评论、源 URL 和其他元信息搜索)。(*)
  4. 编辑网页:可以在抓取前后对网页进行标记、注释或编辑。您还可以创建和管理 HTML 或 Markdown 格式的笔记页面。(*)
  5. 远程访问:可以设置后端服务器来托管从其他机器读取或编辑的检索数据。您还可以为剪贴板创建静态索引,以便发布到不支持动态网页的服务器。(*)
  6. 手机支持:网页剪贴簿支持手机浏览器,如Android版火狐和Kiwi Browser,可以在手机或平板电脑上抓取和编辑网页。
  7. 传统ScrapBook 支持:可以将传统ScrapBook 或ScrapBook X 创建的剪贴簿转换为网络剪贴簿兼容格式。(*)
  * 星号项的全部或部分功能需要与后端服务器配合使用。可以使用 PyWebScrapBook 设置后端服务器。
  * HTZ 或MAFF 存档文件可以使用内置的存档网页查看器查看,使用PyWebScrapBook 或其他辅助工具打开,或解压打开门户页面进行查看。
  看:
  * 下载并安装 PyWebScrapBook:
  * 进一步的解释和常见问题请参考这个总数:(zh_TW)
  * 为了便于编译和更完整的双向讨论,如有问题请尽量向仓库反馈:
  * 如果此工具对您有帮助,您可以捐款以支持我们:
  版本:0.98.1 用户评分:0(满分 5 分) 此版本的下载量:17157
  大小:409KiB 本版本最后更新时间:2021 年 2 月 12 日 查看全部

  浏览器抓取网页(行动支援网页剪贴簿支援行动浏览器)
  介绍:
  WebScrapBook 可以忠实地检索网页内容,支持多种存储格式和自定义设置,可以对检索到的数据进行检索、组织、注释和编辑。此扩展程序继承自 ScrapBook X,后者是 Firefox 的传统附加组件。
  特征:
  1. 忠实抓取:浏览器显示的网页可以抓取存储,不丢失细节。一些重要的元数据,如来源网址和检索时间也如实记录。
  2. 自定义抓取:网页剪贴簿可以抓取选定范围的网页,抓取网页的原创外观(无需页面脚本处理),或者抓取网页作为书签。您还可以自定义如何处理网页中的图片、音频、视频、字体、框架页、样式表、脚本等资源。网页可以保存为文件夹、ZIP 存档文件(HTZ 或 MAFF)或单个 HTML 文件。
  3. 管理数据:您可以在浏览器的侧边栏中使用一个或多个剪贴簿,将检索到的网页以分层树状结构进行组织。每个剪贴簿都可以单独索引以供将来以各种方式搜索(可以组合全文关键词、标题、自定义评论、源 URL 和其他元信息搜索)。(*)
  4. 编辑网页:可以在抓取前后对网页进行标记、注释或编辑。您还可以创建和管理 HTML 或 Markdown 格式的笔记页面。(*)
  5. 远程访问:可以设置后端服务器来托管从其他机器读取或编辑的检索数据。您还可以为剪贴板创建静态索引,以便发布到不支持动态网页的服务器。(*)
  6. 手机支持:网页剪贴簿支持手机浏览器,如Android版火狐和Kiwi Browser,可以在手机或平板电脑上抓取和编辑网页。
  7. 传统ScrapBook 支持:可以将传统ScrapBook 或ScrapBook X 创建的剪贴簿转换为网络剪贴簿兼容格式。(*)
  * 星号项的全部或部分功能需要与后端服务器配合使用。可以使用 PyWebScrapBook 设置后端服务器。
  * HTZ 或MAFF 存档文件可以使用内置的存档网页查看器查看,使用PyWebScrapBook 或其他辅助工具打开,或解压打开门户页面进行查看。
  看:
  * 下载并安装 PyWebScrapBook:
  * 进一步的解释和常见问题请参考这个总数:(zh_TW)
  * 为了便于编译和更完整的双向讨论,如有问题请尽量向仓库反馈:
  * 如果此工具对您有帮助,您可以捐款以支持我们:
  版本:0.98.1 用户评分:0(满分 5 分) 此版本的下载量:17157
  大小:409KiB 本版本最后更新时间:2021 年 2 月 12 日

浏览器抓取网页( 专注于互联网主流的各种技术简明现代魔法-gtgt)

网站优化优采云 发表了文章 • 0 个评论 • 184 次浏览 • 2021-10-31 05:16 • 来自相关话题

  浏览器抓取网页(
专注于互联网主流的各种技术简明现代魔法-gtgt)
  
  专注于互联网主流的各种技术
  简洁现代的魔法 -> -> JavaScript 获取浏览器窗口的大小
  JavaScript 获取浏览器窗口的大小
  2010-04-16
  程序演示:
  获取浏览器的当前窗口大小。当浏览器窗口的大小发生变化时,显示的值会随时发生变化。
  该程序主要使用了有关窗口的 Document 对象的一些属性。这些属性的主要功能和用法如下:
  获取窗口的大小,不同的浏览器需要使用不同的属性和方法:检测窗口的真实大小,需要使用Netscape下的Window属性;IE下,需要深入到Document里面去检测body;在DOM环境下,如果要获取窗口的大小,需要注意的是根元素的大小,而不是元素的大小。Window 对象的innerWidth 属性收录当前窗口的内部宽度。Window 对象的innerHeight 属性收录当前窗口的内部高度。Document 对象的 body 属性对应于 HTML 文档的标签。Document 对象的 documentElement 属性表示 HTML 文档的根节点。文档正文。clientHeight 表示 HTML 文档所在窗口的当前高度。文档正文。clientWidth 表示 HTML 文档所在窗口的当前宽度。JavaScript 代码
  
var winWidth = 0;
var winHeight = 0;
function findDimensions() //函数:获取尺寸
{
// 获取窗口宽度
if (window.innerWidth)
winWidth = window.innerWidth;
else if ((document.body) && (document.body.clientWidth))
winWidth = document.body.clientWidth;
// 获取窗口高度
if (window.innerHeight)
winHeight = window.innerHeight;
else if ((document.body) && (document.body.clientHeight))
winHeight = document.body.clientHeight;

// 通过深入Document内部对body进行检测,获取窗口大小
if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth)
{
winHeight = document.documentElement.clientHeight;
winWidth = document.documentElement.clientWidth;
}
// 结果输出至两个文本框
document.form1.availHeight.value= winHeight;
document.form1.availWidth.value= winWidth;
}
findDimensions(); // 调用函数,获取数值
window.onresize=findDimensions;
  方案实施步骤:
  程序首先创建一个收录两个文本框的窗体来显示当前窗口的宽度和高度,它的值会随着窗口的大小而变化。在后续的 JavaScript 代码中,首先定义了两个变量 winWidth 和 winHeight 来保存窗口的高度和宽度。然后,在函数 findDimensions() 中,使用 window.innerHeight 和 window.innerWidth 获取窗口的高度和宽度,并将两者保存在上述两个变量中。然后深入文档内部检测正文,获取窗口大小,并将其存储在上述两个变量中。在函数的最后,通过按名称访问表单元素,结果输出到两个文本框。在 JavaScript 代码的最后,整个操作都是通过调用 findDimensions() 函数来完成的。 查看全部

  浏览器抓取网页(
专注于互联网主流的各种技术简明现代魔法-gtgt)
  
  专注于互联网主流的各种技术
  简洁现代的魔法 -> -> JavaScript 获取浏览器窗口的大小
  JavaScript 获取浏览器窗口的大小
  2010-04-16
  程序演示:
  获取浏览器的当前窗口大小。当浏览器窗口的大小发生变化时,显示的值会随时发生变化。
  该程序主要使用了有关窗口的 Document 对象的一些属性。这些属性的主要功能和用法如下:
  获取窗口的大小,不同的浏览器需要使用不同的属性和方法:检测窗口的真实大小,需要使用Netscape下的Window属性;IE下,需要深入到Document里面去检测body;在DOM环境下,如果要获取窗口的大小,需要注意的是根元素的大小,而不是元素的大小。Window 对象的innerWidth 属性收录当前窗口的内部宽度。Window 对象的innerHeight 属性收录当前窗口的内部高度。Document 对象的 body 属性对应于 HTML 文档的标签。Document 对象的 documentElement 属性表示 HTML 文档的根节点。文档正文。clientHeight 表示 HTML 文档所在窗口的当前高度。文档正文。clientWidth 表示 HTML 文档所在窗口的当前宽度。JavaScript 代码
  
var winWidth = 0;
var winHeight = 0;
function findDimensions() //函数:获取尺寸
{
// 获取窗口宽度
if (window.innerWidth)
winWidth = window.innerWidth;
else if ((document.body) && (document.body.clientWidth))
winWidth = document.body.clientWidth;
// 获取窗口高度
if (window.innerHeight)
winHeight = window.innerHeight;
else if ((document.body) && (document.body.clientHeight))
winHeight = document.body.clientHeight;

// 通过深入Document内部对body进行检测,获取窗口大小
if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth)
{
winHeight = document.documentElement.clientHeight;
winWidth = document.documentElement.clientWidth;
}
// 结果输出至两个文本框
document.form1.availHeight.value= winHeight;
document.form1.availWidth.value= winWidth;
}
findDimensions(); // 调用函数,获取数值
window.onresize=findDimensions;
  方案实施步骤:
  程序首先创建一个收录两个文本框的窗体来显示当前窗口的宽度和高度,它的值会随着窗口的大小而变化。在后续的 JavaScript 代码中,首先定义了两个变量 winWidth 和 winHeight 来保存窗口的高度和宽度。然后,在函数 findDimensions() 中,使用 window.innerHeight 和 window.innerWidth 获取窗口的高度和宽度,并将两者保存在上述两个变量中。然后深入文档内部检测正文,获取窗口大小,并将其存储在上述两个变量中。在函数的最后,通过按名称访问表单元素,结果输出到两个文本框。在 JavaScript 代码的最后,整个操作都是通过调用 findDimensions() 函数来完成的。

浏览器抓取网页(浏览器抓取真实直播源地址(纯前端解析)() )

网站优化优采云 发表了文章 • 0 个评论 • 431 次浏览 • 2021-10-31 04:06 • 来自相关话题

  浏览器抓取网页(浏览器抓取真实直播源地址(纯前端解析)()
)
  浏览器抓取真实直播源地址(纯前端JS解析)
  网上搜索各种平台的直播源地址满天飞,但也经常有失败的时候,因为官方会定期升级系统修改各种参数或链接,使直播源不永久,所以我们的人民一直提倡教导他人。最好教人如何钓鱼。与其把直播源给别人,还不如教大家如何爬取直播源,哪怕失败了。
  
  0. 前言
  业余时间喜欢用虎牙看直播,所以第一时间想到的就是怎么抢虎牙的直播源。
  爬取之前需要了解一下直播视频源的分类和区别,可以自己了解hls、flv、m3u8等知识。
  Tips:本教程只教你如何使用前端调试技巧和基本的爬虫操作。它不用于商业用途。
  1. 浏览器爬取过程
  首先打开虎牙官网,找到直播间:这里是你使用的移动端的网页(因为移动端简单)
  我随手读了一遍。没有ajax请求,所以地址必须和页面一起带进来。现在直播的网页大多是SSR(服务端渲染),所以只能去页面源码中查找:
  好人!直接找了一个我很想寻址的liveLineUrl,就是m3u8的地址:
  
  在线m3u8播放测试网站:
  这个网站可以测试播放源是否好,加油!尝试一下!
  
  这是完美的!
  
  但有那么简单吗?
  
  我尝试了我经常看的直播间【Let's Watch】看电影什么的,结果:
  
  
  这就是正在发生的事情。. . 然后对比发现问题前后的两个链接,以下是【一起看】的链接:
  
  然后想到liveLineUrl参数不是全局变量,控制台打印出来看看,然后仔细对比发现参数变了,其中一个fm参数变成了seqid:
  
  先试试看控制台打印是否可以播放:
  
  OK,司马懿出来了,现在只需要分析破解参数了。
  2. 参数分析
  Ctrl + Shift + F 搜索liveLineUrl,然后在这里找到js处理url,打个断点调试看看如何处理:
  断点进入Object(m.default)(window.liveLineUrl),可以看到这里是处理参数的地方,最后返回的是解析后的参数字符串:
  
  我整理了一下解析函数,重新实现了:
  function parseUrl(url){
let params = url.split("?")[1];
params = params.split("&");
let paramsObj = {};
for (let i = 0; i {
y += `&${e}=${others[e]}`
});
return `${mainUrl}?wsSecret=${newWsSecret}&wsTime=${wsTime}&u=0&seqid=${time}${y}`;
}
  其中用到了Base64和MD5相关的函数:
<p>// md5下载:https://raw.githubusercontent. ... d5.js
let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f > 2;
o = (n & 3) 4;
u = (r & 15) 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f > 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n


虎牙直播



To view this video please enable JavaScript, and consider upgrading to a web browser that
supports HTML5 video






let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f > 2;
o = (n & 3) 4;
u = (r & 15) 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f > 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n 查看全部

  浏览器抓取网页(浏览器抓取真实直播源地址(纯前端解析)()
)
  浏览器抓取真实直播源地址(纯前端JS解析)
  网上搜索各种平台的直播源地址满天飞,但也经常有失败的时候,因为官方会定期升级系统修改各种参数或链接,使直播源不永久,所以我们的人民一直提倡教导他人。最好教人如何钓鱼。与其把直播源给别人,还不如教大家如何爬取直播源,哪怕失败了。
  
  0. 前言
  业余时间喜欢用虎牙看直播,所以第一时间想到的就是怎么抢虎牙的直播源。
  爬取之前需要了解一下直播视频源的分类和区别,可以自己了解hls、flv、m3u8等知识。
  Tips:本教程只教你如何使用前端调试技巧和基本的爬虫操作。它不用于商业用途。
  1. 浏览器爬取过程
  首先打开虎牙官网,找到直播间:这里是你使用的移动端的网页(因为移动端简单)
  我随手读了一遍。没有ajax请求,所以地址必须和页面一起带进来。现在直播的网页大多是SSR(服务端渲染),所以只能去页面源码中查找:
  好人!直接找了一个我很想寻址的liveLineUrl,就是m3u8的地址:
  
  在线m3u8播放测试网站:
  这个网站可以测试播放源是否好,加油!尝试一下!
  
  这是完美的!
  
  但有那么简单吗?
  
  我尝试了我经常看的直播间【Let's Watch】看电影什么的,结果:
  
  
  这就是正在发生的事情。. . 然后对比发现问题前后的两个链接,以下是【一起看】的链接:
  
  然后想到liveLineUrl参数不是全局变量,控制台打印出来看看,然后仔细对比发现参数变了,其中一个fm参数变成了seqid:
  
  先试试看控制台打印是否可以播放:
  
  OK,司马懿出来了,现在只需要分析破解参数了。
  2. 参数分析
  Ctrl + Shift + F 搜索liveLineUrl,然后在这里找到js处理url,打个断点调试看看如何处理:
  断点进入Object(m.default)(window.liveLineUrl),可以看到这里是处理参数的地方,最后返回的是解析后的参数字符串:
  
  我整理了一下解析函数,重新实现了:
  function parseUrl(url){
let params = url.split("?")[1];
params = params.split("&");
let paramsObj = {};
for (let i = 0; i {
y += `&${e}=${others[e]}`
});
return `${mainUrl}?wsSecret=${newWsSecret}&wsTime=${wsTime}&u=0&seqid=${time}${y}`;
}
  其中用到了Base64和MD5相关的函数:
<p>// md5下载:https://raw.githubusercontent. ... d5.js
let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f > 2;
o = (n & 3) 4;
u = (r & 15) 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f > 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n


虎牙直播



To view this video please enable JavaScript, and consider upgrading to a web browser that
supports HTML5 video






let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f > 2;
o = (n & 3) 4;
u = (r & 15) 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f > 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n

浏览器抓取网页(猫抓Chrome插件使用方法、参照chrome插件的离线安装方法)

网站优化优采云 发表了文章 • 0 个评论 • 518 次浏览 • 2021-10-31 01:01 • 来自相关话题

  浏览器抓取网页(猫抓Chrome插件使用方法、参照chrome插件的离线安装方法)
  Mozhao Chrome 插件官方介绍 Mozhao 插件是一个插件,支持嗅探和抓取所有 Chrome 内核浏览器安装的网络视频链接。您可以从任何站点获取任何视频数据。使用此插件,一键获取您需要的链接,并自动抓取并保存。使用非常方便,打开需要下载文件的网站。您可以在此页面抓取自定义设置的所有内容,然后选择您要下载的内容下载到您的本地计算机,以方便使用!
  墨章Chrome插件使用方法
  1、mozhao插件离线安装方式是指chrome插件离线安装方式。输入 chrome://extensions 进入浏览器的扩展程序界面;最新chrome浏览器下载地址:. 点击添加扩展程序,快速将程序添加到谷歌浏览器并在右上角显示;
  
  2、用户可以自定义捕获的视频和音频内容;
  
  3、打开网站,点击猫手,可以抓取页面内容,后面有复制和下载选项,点击要下载的视频和音频文件,即可下载它!
  
  4. 以优酷土豆视频为例,点击图标即可:
  
  猫抓扩展方法嗅探爬取工具依赖于chrome API...如果需要更完美,请尝试IDM甚至Wireshark等软件...非常感谢热心朋友不断提交的网址无法捕获。有一些网站a站可以在设置中添加MIME类型的application/octet-stream来解决。这将捕获所有非媒体文件。知道地址可能下载不了流媒体(所以从1.0.7开始干掉) 查看全部

  浏览器抓取网页(猫抓Chrome插件使用方法、参照chrome插件的离线安装方法)
  Mozhao Chrome 插件官方介绍 Mozhao 插件是一个插件,支持嗅探和抓取所有 Chrome 内核浏览器安装的网络视频链接。您可以从任何站点获取任何视频数据。使用此插件,一键获取您需要的链接,并自动抓取并保存。使用非常方便,打开需要下载文件的网站。您可以在此页面抓取自定义设置的所有内容,然后选择您要下载的内容下载到您的本地计算机,以方便使用!
  墨章Chrome插件使用方法
  1、mozhao插件离线安装方式是指chrome插件离线安装方式。输入 chrome://extensions 进入浏览器的扩展程序界面;最新chrome浏览器下载地址:. 点击添加扩展程序,快速将程序添加到谷歌浏览器并在右上角显示;
  
  2、用户可以自定义捕获的视频和音频内容;
  
  3、打开网站,点击猫手,可以抓取页面内容,后面有复制和下载选项,点击要下载的视频和音频文件,即可下载它!
  
  4. 以优酷土豆视频为例,点击图标即可:
  
  猫抓扩展方法嗅探爬取工具依赖于chrome API...如果需要更完美,请尝试IDM甚至Wireshark等软件...非常感谢热心朋友不断提交的网址无法捕获。有一些网站a站可以在设置中添加MIME类型的application/octet-stream来解决。这将捕获所有非媒体文件。知道地址可能下载不了流媒体(所以从1.0.7开始干掉)

浏览器抓取网页(STM32获取的网页和浏览器获取不一样?)

网站优化优采云 发表了文章 • 0 个评论 • 107 次浏览 • 2021-10-31 00:20 • 来自相关话题

  浏览器抓取网页(STM32获取的网页和浏览器获取不一样?)
  获取到的网页内容与浏览器获取到的网页内容是否不同?
  编程环境:vc6.0
  工程:控制台应用
  程序的具体情况:根据http协议获取的网页内容是成功的,但是发现程序获取的网页和浏览器获取的网页不仅内容不同,最明显的是编码不同。我在浏览器中查看了源文件,发现字符编码是utf-8,但是程序下载的源文件是gb2312
  发送的协议内容为char *request = "GET / HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\nHost: \r\nConnection:关闭\r\n\r\n";
  C/C++ 代码
  
char host[] = "www.baidu.com";
char *request = "GET / HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\nHost: www.baidu.com\r\nConnection: Close\r\n\r\n";
  我想知道为什么不一样。我的请求都是模拟抓包软件中浏览器的请求,除了缺少Accept-Encoding: gzip, deflate
  除了一项,其他完全一样,(即使加了这一项,两个代码还是不一样)
  - - - 解决方案 - - - - - - - - - -
  你已经自己回答了所有问题,这个想法是正确的
  - - - 解决方案 - - - - - - - - - -
  需要发送相应的cookie
  - - - 解决方案 - - - - - - - - - -
  用抓包工具对比看看就清楚了
  - - - 解决方案 - - - - - - - - - -
  请求可能仍然不同,检查cookie,useragent。 查看全部

  浏览器抓取网页(STM32获取的网页和浏览器获取不一样?)
  获取到的网页内容与浏览器获取到的网页内容是否不同?
  编程环境:vc6.0
  工程:控制台应用
  程序的具体情况:根据http协议获取的网页内容是成功的,但是发现程序获取的网页和浏览器获取的网页不仅内容不同,最明显的是编码不同。我在浏览器中查看了源文件,发现字符编码是utf-8,但是程序下载的源文件是gb2312
  发送的协议内容为char *request = "GET / HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\nHost: \r\nConnection:关闭\r\n\r\n";
  C/C++ 代码
  
char host[] = "www.baidu.com";
char *request = "GET / HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\nHost: www.baidu.com\r\nConnection: Close\r\n\r\n";
  我想知道为什么不一样。我的请求都是模拟抓包软件中浏览器的请求,除了缺少Accept-Encoding: gzip, deflate
  除了一项,其他完全一样,(即使加了这一项,两个代码还是不一样)
  - - - 解决方案 - - - - - - - - - -
  你已经自己回答了所有问题,这个想法是正确的
  - - - 解决方案 - - - - - - - - - -
  需要发送相应的cookie
  - - - 解决方案 - - - - - - - - - -
  用抓包工具对比看看就清楚了
  - - - 解决方案 - - - - - - - - - -
  请求可能仍然不同,检查cookie,useragent。

浏览器抓取网页(代理支持·支持TLS/SSL协议)

网站优化优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2021-10-31 00:19 • 来自相关话题

  浏览器抓取网页(代理支持·支持TLS/SSL协议)
  · 代理支持
  · 支持TLS/SSL协议
  2. Cheerio(也称为解析器):
  · Cheerio 提供专为服务器设计的快速、灵活和精益的核心jQuery 实现。
  · Cheerio 解析标记并提供 API 用于遍历/操作结果数据结构。
  特征:
  · 熟悉的语法:Cheerio 实现了核心 jQuery 的一个子集。它去除了jQuery库中所有的DOM不一致和浏览痕迹,充分展示了API的魅力。
  · 快速:Cheerio 使用非常简单且一致的 DOM 模型。因此,解析、操作和呈现非常高效。初步的端到端基准测试表明,cheerio 比 JSDOM 快约 8 倍。
  · 惊人的灵活性:Cheerio 几乎可以解析任何 HTML 或 XML 文档。
  3.渗透(又名解析器)
  · Osmosis 包括 HTML/XML 解析器和 webscraper。
  · 它是用 node.js 编写的,收录 css3/xpath 选择器和轻量级 http 包装器。
  · 没有像 Cheerio 这样的大依赖。
  特征:
  · 支持 CSS 3.0 和 XPath1.0 选择器的混合
  · 加载和搜索 AJAX 内容
  · 记录 URL、重定向和错误
  · Cookie jar 和自定义 cookie/header/user agent
  · 登录/表单提交、会话 cookie 和基本身份验证
  · 单代理或多代理处理代理故障
  · 重试和重定向限制
  4. Puppeteer(也称为无头 Chrome 自动化浏览器):
  Puppeteer 是一个 Node.js 库,它提供了一个简单但高效的 API,使您能够控制 Google 的 Chrome 或 Chromium 浏览器。
  它还可以在无头模式下运行 Chromium(对于在服务器上运行浏览器非常有用),并且可以在不需要用户界面的情况下发送和接收请求。
  最好的部分是它可以在后台操作,遵循 API 的说明。
  特征:
  · 单击按钮、链接和图像等元素
  · 自动表单提交
  · 导航页面
  · 使用时间线追踪找出问题所在
  · 直接在浏览器中自动测试用户界面和各种前端应用程序
  · 截屏
  · 将网页转换为pdf文件
  5. Apify SDK(也称为完整的网页抓取框架):
  · Apify SDK 是一个开源的Node.js 库,用于抓取和网页抓取。
  · Apify SDK 是一种独特的工具,可简化网络爬虫、爬虫、数据提取器和网络自动化任务的开发。
  · 提供管理和自动扩容headless Chrome/Puppeteer实例池、维护待爬取的URL队列、将爬取结果存储到本地文件系统或云端、轮换代理等工具。
  · 可以在自己的应用中独立使用,也可以在 Apify 云上运行的参与者之间使用。
  特征:
  · 使用 URL 的持久队列来深度获取整个 网站。
  · 运行CSV文件中收录100k URL的爬取代码,代码崩溃时不会丢失任何数据。
  · 通过旋转代理隐藏您的浏览器源。
  · 安排代码定期运行并发送错误通知。
  · 禁用网站 使用的浏览器指纹保护。
  随着时间的推移,对网络爬虫的需求不断增长。所以程序员们,你们的春天来了!搞定了很多只会复制粘贴数据的妹子。用你的代码让女孩认真起来!但是网络爬虫也需要谨慎。归根结底,信息不是可以被窃取和出售的东西。不要像这个老铁一样炫耀:
  
  
  发表评论,点赞,发朋友圈 查看全部

  浏览器抓取网页(代理支持·支持TLS/SSL协议)
  · 代理支持
  · 支持TLS/SSL协议
  2. Cheerio(也称为解析器):
  · Cheerio 提供专为服务器设计的快速、灵活和精益的核心jQuery 实现。
  · Cheerio 解析标记并提供 API 用于遍历/操作结果数据结构。
  特征:
  · 熟悉的语法:Cheerio 实现了核心 jQuery 的一个子集。它去除了jQuery库中所有的DOM不一致和浏览痕迹,充分展示了API的魅力。
  · 快速:Cheerio 使用非常简单且一致的 DOM 模型。因此,解析、操作和呈现非常高效。初步的端到端基准测试表明,cheerio 比 JSDOM 快约 8 倍。
  · 惊人的灵活性:Cheerio 几乎可以解析任何 HTML 或 XML 文档。
  3.渗透(又名解析器)
  · Osmosis 包括 HTML/XML 解析器和 webscraper。
  · 它是用 node.js 编写的,收录 css3/xpath 选择器和轻量级 http 包装器。
  · 没有像 Cheerio 这样的大依赖。
  特征:
  · 支持 CSS 3.0 和 XPath1.0 选择器的混合
  · 加载和搜索 AJAX 内容
  · 记录 URL、重定向和错误
  · Cookie jar 和自定义 cookie/header/user agent
  · 登录/表单提交、会话 cookie 和基本身份验证
  · 单代理或多代理处理代理故障
  · 重试和重定向限制
  4. Puppeteer(也称为无头 Chrome 自动化浏览器):
  Puppeteer 是一个 Node.js 库,它提供了一个简单但高效的 API,使您能够控制 Google 的 Chrome 或 Chromium 浏览器。
  它还可以在无头模式下运行 Chromium(对于在服务器上运行浏览器非常有用),并且可以在不需要用户界面的情况下发送和接收请求。
  最好的部分是它可以在后台操作,遵循 API 的说明。
  特征:
  · 单击按钮、链接和图像等元素
  · 自动表单提交
  · 导航页面
  · 使用时间线追踪找出问题所在
  · 直接在浏览器中自动测试用户界面和各种前端应用程序
  · 截屏
  · 将网页转换为pdf文件
  5. Apify SDK(也称为完整的网页抓取框架):
  · Apify SDK 是一个开源的Node.js 库,用于抓取和网页抓取。
  · Apify SDK 是一种独特的工具,可简化网络爬虫、爬虫、数据提取器和网络自动化任务的开发。
  · 提供管理和自动扩容headless Chrome/Puppeteer实例池、维护待爬取的URL队列、将爬取结果存储到本地文件系统或云端、轮换代理等工具。
  · 可以在自己的应用中独立使用,也可以在 Apify 云上运行的参与者之间使用。
  特征:
  · 使用 URL 的持久队列来深度获取整个 网站。
  · 运行CSV文件中收录100k URL的爬取代码,代码崩溃时不会丢失任何数据。
  · 通过旋转代理隐藏您的浏览器源。
  · 安排代码定期运行并发送错误通知。
  · 禁用网站 使用的浏览器指纹保护。
  随着时间的推移,对网络爬虫的需求不断增长。所以程序员们,你们的春天来了!搞定了很多只会复制粘贴数据的妹子。用你的代码让女孩认真起来!但是网络爬虫也需要谨慎。归根结底,信息不是可以被窃取和出售的东西。不要像这个老铁一样炫耀:
  
  
  发表评论,点赞,发朋友圈

浏览器抓取网页(一个模拟浏览器的执行框架(一):安装部署到执行)

网站优化优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2021-10-29 20:19 • 来自相关话题

  浏览器抓取网页(一个模拟浏览器的执行框架(一):安装部署到执行)
  前言
  Selenium是一个模拟浏览器的自动化执行框架,但是如果每次执行都要打开浏览器处理任务,效率不高。最重要的是,如果安装在Centos7服务器环境下,打开浏览器模拟操作比较不合适,尤其是需要截取网页图片的时候。
  这时候可以考虑使用Chrome的无头浏览器模式。所谓无头浏览器模式,不需要打开浏览器,但是可以模拟打开浏览器的执行效果,一切都是无界面执行的。
  下面我们来看看如何安装部署到执行。
  1.安装chrome 1.1 添加谷歌的repo源
  vim /etc/yum.repos.d/google.repo
  在打开的空文件中填写以下内容
  [google]
name=Google-x86_64
baseurl=http://dl.google.com/linux/rpm/stable/x86_64
enabled=1
gpgcheck=0
gpgkey=https://dl-ssl.google.com/linu ... y.pub
  1.2 使用yum安装chrome浏览器
  $ sudo yum makecache
$ sudo yum install google-chrome-stable -y
  2.安装chromedriver驱动2.1 查看chrome版本
  安装成功后,查看安装的chrom版本如下:
  [root@locust03 ~]# google-chrome --version
Google Chrome 78.0.3904.108
[root@locust03 ~]#
  2.2 下载chromedriver
  selenium要执行chrome浏览器,需要安装驱动chromedriver,下载chromedriver可以从两个地方下载,点击访问如下:
  所以其实一般都是访问国内的镜像地址,如下:
  可以看到有很多版本可供下载。从上面可以看到chrome版本号Google Chrome 78.0.3904.108,所以大致按照版本号搜索。如下:
  点击最新版本号进入,可以看到下载的系统版本,如下:
  因为要安装在Centos7服务器上,所以选择linux64位版本。
  wget http://npm.taobao.org/mirrors/ ... 4.zip
  2.3 添加到环境变量 $PATH
  我下载了/opt目录下的chromedriver_linux64.zip,然后解压。最后编写环境配置文件/etc/profile。
  # 1.进入opt目录
[root@server opt]# cd /opt/
# 2.下载chromdirver
[root@server opt]# wget http://npm.taobao.org/mirrors/ ... 4.zip
# 3.解压zip包
[root@server opt]# unzip chromedriver_linux64.zip
# 4.得到一个二进制可执行文件
[root@server opt]# ls -ll chromedriver
-rwxrwxr-x 1 root root 11610824 Nov 19 02:20 chromedriver
# 5. 创建存放驱动的文件夹driver
[root@server opt]# mkdir -p /opt/driver/bin
# 6.将chromedirver放入文件夹driver中bin下
[root@server opt]# mv chromedriver /opt/driver/bin/
  配置环境变量如下:
  [root@server driver]# vim /etc/profile
...
# 添加内容
export DRIVER=/opt/driver
export PATH=$PATH:$DRIVER/bin
  设置环境变量立即生效,执行全局命令查看chromedirver版本:
  [root@server ~]# source /etc/profile
[root@server ~]#
[root@server ~]# chromedriver --version
ChromeDriver 78.0.3904.105 (60e2d8774a8151efa6a00b1f358371b1e0e07ee2-refs/branch-heads/3904@{#877})
[root@server ~]#
  能够全局执行 chromedriver 表示环境配置已经生效。
  3. 安装硒
  Selenium 可以简单地用 pip 安装在你项目的虚拟环境中
  pip3 install selenium
  执行查看安装的版本如下:
  [root@server selenium_ex]# pip3 install selenium
Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
Collecting selenium
Downloading http://mirrors.tencentyun.com/ ... y.whl (904kB)
|████████████████████████████████| 911kB 990kB/s
Requirement already satisfied: urllib3 in /usr/local/python3/lib/python3.7/site-packages (from selenium) (1.25.6)
Installing collected packages: selenium
Successfully installed selenium-3.141.0
[root@locust03 selenium_ex]#
  4. 脚本测试
  编写一个 test.py 脚本如下:
  from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
import time
import os.path
# 配置驱动路径
DRIVER_PATH = &#x27;/opt/driver/bin/chromedriver&#x27;
if __name__ == "__main__":
# 设置浏览器
options = Options()
options.add_argument(&#x27;--no-sandbox&#x27;)
options.add_argument(&#x27;--headless&#x27;) # 无头参数
options.add_argument(&#x27;--disable-gpu&#x27;)
# 启动浏览器
driver = Chrome(executable_path=DRIVER_PATH, options=options)
driver.maximize_window()
try:
# 访问页面
url = &#x27;https://www.jianshu.com/u/a94f887f8776&#x27;
driver.get(url)
time.sleep(1)
# 设置截屏整个网页的宽度以及高度
scroll_width = 1600
scroll_height = 1500
driver.set_window_size(scroll_width, scroll_height)
# 保存图片
img_path = os.getcwd()
img_name = time.strftime(&#x27;%Y-%m-%d-%H-%M-%S&#x27;, time.localtime(time.time()))
img = "%s.png" % os.path.join(img_path, img_name)
driver.get_screenshot_as_file(img)
# 关闭浏览器
driver.close()
driver.quit()
except Exception as e:
print(e)
  在服务器上执行以下操作:
  [root@server selenium_ex]# python3 test.py
[root@server selenium_ex]#
[root@server selenium_ex]# ls
2019-11-28-15-06-48.png test.py
[root@server selenium_ex]#
  下载图片查看一下,如下:
  可以看到已经可以正常模拟浏览器登录了,网页的图片也被截取了。从图中可以看出,只要有中文,就会显示方框符号。这是因为Centos7默认没有安装中文字体,所以打开chrom浏览器无法正常显示中文。
  解决办法是安装Centos7的中文字体,这里就不介绍了。 查看全部

  浏览器抓取网页(一个模拟浏览器的执行框架(一):安装部署到执行)
  前言
  Selenium是一个模拟浏览器的自动化执行框架,但是如果每次执行都要打开浏览器处理任务,效率不高。最重要的是,如果安装在Centos7服务器环境下,打开浏览器模拟操作比较不合适,尤其是需要截取网页图片的时候。
  这时候可以考虑使用Chrome的无头浏览器模式。所谓无头浏览器模式,不需要打开浏览器,但是可以模拟打开浏览器的执行效果,一切都是无界面执行的。
  下面我们来看看如何安装部署到执行。
  1.安装chrome 1.1 添加谷歌的repo源
  vim /etc/yum.repos.d/google.repo
  在打开的空文件中填写以下内容
  [google]
name=Google-x86_64
baseurl=http://dl.google.com/linux/rpm/stable/x86_64
enabled=1
gpgcheck=0
gpgkey=https://dl-ssl.google.com/linu ... y.pub
  1.2 使用yum安装chrome浏览器
  $ sudo yum makecache
$ sudo yum install google-chrome-stable -y
  2.安装chromedriver驱动2.1 查看chrome版本
  安装成功后,查看安装的chrom版本如下:
  [root@locust03 ~]# google-chrome --version
Google Chrome 78.0.3904.108
[root@locust03 ~]#
  2.2 下载chromedriver
  selenium要执行chrome浏览器,需要安装驱动chromedriver,下载chromedriver可以从两个地方下载,点击访问如下:
  所以其实一般都是访问国内的镜像地址,如下:
  可以看到有很多版本可供下载。从上面可以看到chrome版本号Google Chrome 78.0.3904.108,所以大致按照版本号搜索。如下:
  点击最新版本号进入,可以看到下载的系统版本,如下:
  因为要安装在Centos7服务器上,所以选择linux64位版本。
  wget http://npm.taobao.org/mirrors/ ... 4.zip
  2.3 添加到环境变量 $PATH
  我下载了/opt目录下的chromedriver_linux64.zip,然后解压。最后编写环境配置文件/etc/profile。
  # 1.进入opt目录
[root@server opt]# cd /opt/
# 2.下载chromdirver
[root@server opt]# wget http://npm.taobao.org/mirrors/ ... 4.zip
# 3.解压zip包
[root@server opt]# unzip chromedriver_linux64.zip
# 4.得到一个二进制可执行文件
[root@server opt]# ls -ll chromedriver
-rwxrwxr-x 1 root root 11610824 Nov 19 02:20 chromedriver
# 5. 创建存放驱动的文件夹driver
[root@server opt]# mkdir -p /opt/driver/bin
# 6.将chromedirver放入文件夹driver中bin下
[root@server opt]# mv chromedriver /opt/driver/bin/
  配置环境变量如下:
  [root@server driver]# vim /etc/profile
...
# 添加内容
export DRIVER=/opt/driver
export PATH=$PATH:$DRIVER/bin
  设置环境变量立即生效,执行全局命令查看chromedirver版本:
  [root@server ~]# source /etc/profile
[root@server ~]#
[root@server ~]# chromedriver --version
ChromeDriver 78.0.3904.105 (60e2d8774a8151efa6a00b1f358371b1e0e07ee2-refs/branch-heads/3904@{#877})
[root@server ~]#
  能够全局执行 chromedriver 表示环境配置已经生效。
  3. 安装硒
  Selenium 可以简单地用 pip 安装在你项目的虚拟环境中
  pip3 install selenium
  执行查看安装的版本如下:
  [root@server selenium_ex]# pip3 install selenium
Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
Collecting selenium
Downloading http://mirrors.tencentyun.com/ ... y.whl (904kB)
|████████████████████████████████| 911kB 990kB/s
Requirement already satisfied: urllib3 in /usr/local/python3/lib/python3.7/site-packages (from selenium) (1.25.6)
Installing collected packages: selenium
Successfully installed selenium-3.141.0
[root@locust03 selenium_ex]#
  4. 脚本测试
  编写一个 test.py 脚本如下:
  from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
import time
import os.path
# 配置驱动路径
DRIVER_PATH = &#x27;/opt/driver/bin/chromedriver&#x27;
if __name__ == "__main__":
# 设置浏览器
options = Options()
options.add_argument(&#x27;--no-sandbox&#x27;)
options.add_argument(&#x27;--headless&#x27;) # 无头参数
options.add_argument(&#x27;--disable-gpu&#x27;)
# 启动浏览器
driver = Chrome(executable_path=DRIVER_PATH, options=options)
driver.maximize_window()
try:
# 访问页面
url = &#x27;https://www.jianshu.com/u/a94f887f8776&#x27;
driver.get(url)
time.sleep(1)
# 设置截屏整个网页的宽度以及高度
scroll_width = 1600
scroll_height = 1500
driver.set_window_size(scroll_width, scroll_height)
# 保存图片
img_path = os.getcwd()
img_name = time.strftime(&#x27;%Y-%m-%d-%H-%M-%S&#x27;, time.localtime(time.time()))
img = "%s.png" % os.path.join(img_path, img_name)
driver.get_screenshot_as_file(img)
# 关闭浏览器
driver.close()
driver.quit()
except Exception as e:
print(e)
  在服务器上执行以下操作:
  [root@server selenium_ex]# python3 test.py
[root@server selenium_ex]#
[root@server selenium_ex]# ls
2019-11-28-15-06-48.png test.py
[root@server selenium_ex]#
  下载图片查看一下,如下:
  可以看到已经可以正常模拟浏览器登录了,网页的图片也被截取了。从图中可以看出,只要有中文,就会显示方框符号。这是因为Centos7默认没有安装中文字体,所以打开chrom浏览器无法正常显示中文。
  解决办法是安装Centos7的中文字体,这里就不介绍了。

浏览器抓取网页(大数据时代已然到来,抓取网页数据成为开展竞争对手分析、商业数据挖掘和科研的重要手段)

网站优化优采云 发表了文章 • 0 个评论 • 206 次浏览 • 2021-10-28 17:25 • 来自相关话题

  浏览器抓取网页(大数据时代已然到来,抓取网页数据成为开展竞争对手分析、商业数据挖掘和科研的重要手段)
  网页数据爬取是指从互联网上获取数据,并将获取的非结构化数据转化为结构化数据,最后将数据存储在本地计算机或数据库中的一种技术。
  目前,全球网络数据以每年40%左右的速度增长。IDC(互联网数据中心)报告显示,2013年全球数据4.4ZB。到2020年,全球数据总量将达到40ZB。大数据时代已经到来,网络数据采集已成为进行竞争对手分析、业务数据挖掘、科学研究的重要手段。
  
  我们在做数据分析的时候,会发现大部分的参考数据都是从网上获取的。互联网上的原创数据往往不尽如人意,难以满足我们的个性化需求。因此,我们需要根据实际情况有针对性地抓取网页数据。
  网页操作
  引用 Micorsoft Internet Controls 后,我们可以对页面做任何我们想做的事情,但是我们需要在主页上有一个页面,上帝说我们需要一个页面!
  1、打开网页
  我们以在百度上搜索“查虎”关键词为例:
  使用 CreateObject("internetexplorer.application")
  .可见 = 真
  .导航“怎么了”
  '关闭页面
  '。退出
  代码很简单,先创建一个IE对象,然后给一些属性赋值。Visible就是可见性,是指网页被操作时是否会看到网页。熟练后可以设置为False,这样不仅让程序在运行时有一种神秘感(而不是),而且速度也快了一点。
  
  但是有一点要记住,这个网页在我们打开后并没有关闭,这意味着程序结束后需要手动关闭它。如果网页不可见,则无法手动关闭。代码中的注释部分用于关闭网页。不用说,导航就是 URL。
  我们必须等到网页完全加载后才能开始抓取网页数据。这次我们使用:(从这里开始,所有的代码都需要写在With代码块中)
  而 .ReadyState 4 或 .Busy
  事件
  温德
  Busy 是网页的繁忙状态,ReadyState 是 HTTP 的五种就绪状态,对应如下:
  : 请求未初始化(open() 尚未被调用)。
  1:请求已经建立,但是还没有发送(send()没有被调用)。
  2:请求已经发送并正在处理中(通常现在可以从响应中获取内容头)。
  3:请求正在处理中;通常响应中有部分数据可用,但服务器还没有完成响应的生成。
  4:响应完成;您可以获取并使用服务器的响应。
  2、获取信息
  我们先爬取网页数据,然后过滤掉有用的部分,然后慢慢添加条件爬取。
  设置 dmt = .Document
  对于 i = 0 到 dmt.all.Length-1
  设置 htMent = dmt.all(i)
  使用 ActiveSheet
  .Cells(i + 2, "A") = htMent.tagName
  .Cells(i + 2, "B") = TypeName(htMent)
  .Cells(i + 2, "C") = htMent.ID
  .Cells(i + 2, "D") = htMent.Name
  .Cells(i + 2, "E") = htMent.Value
  .Cells(i + 2, "F") = htMent.Text
  .Cells(i + 2, "G") = htMent.innerText
  接下来我
  这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。还有其他几种方法:
  getElementById("IDName"):返回第一个带有IDName的标签 getElementsByName("a"):返回所有标签,返回值为集合 getElementsByClassName("css"):返回所有样式名称为css的标签,返回该值是一个集合。
  这些更方便用于在抓取所有页面内容后帮助过滤有效信息。 查看全部

  浏览器抓取网页(大数据时代已然到来,抓取网页数据成为开展竞争对手分析、商业数据挖掘和科研的重要手段)
  网页数据爬取是指从互联网上获取数据,并将获取的非结构化数据转化为结构化数据,最后将数据存储在本地计算机或数据库中的一种技术。
  目前,全球网络数据以每年40%左右的速度增长。IDC(互联网数据中心)报告显示,2013年全球数据4.4ZB。到2020年,全球数据总量将达到40ZB。大数据时代已经到来,网络数据采集已成为进行竞争对手分析、业务数据挖掘、科学研究的重要手段。
  
  我们在做数据分析的时候,会发现大部分的参考数据都是从网上获取的。互联网上的原创数据往往不尽如人意,难以满足我们的个性化需求。因此,我们需要根据实际情况有针对性地抓取网页数据。
  网页操作
  引用 Micorsoft Internet Controls 后,我们可以对页面做任何我们想做的事情,但是我们需要在主页上有一个页面,上帝说我们需要一个页面!
  1、打开网页
  我们以在百度上搜索“查虎”关键词为例:
  使用 CreateObject("internetexplorer.application")
  .可见 = 真
  .导航“怎么了”
  '关闭页面
  '。退出
  代码很简单,先创建一个IE对象,然后给一些属性赋值。Visible就是可见性,是指网页被操作时是否会看到网页。熟练后可以设置为False,这样不仅让程序在运行时有一种神秘感(而不是),而且速度也快了一点。
  
  但是有一点要记住,这个网页在我们打开后并没有关闭,这意味着程序结束后需要手动关闭它。如果网页不可见,则无法手动关闭。代码中的注释部分用于关闭网页。不用说,导航就是 URL。
  我们必须等到网页完全加载后才能开始抓取网页数据。这次我们使用:(从这里开始,所有的代码都需要写在With代码块中)
  而 .ReadyState 4 或 .Busy
  事件
  温德
  Busy 是网页的繁忙状态,ReadyState 是 HTTP 的五种就绪状态,对应如下:
  : 请求未初始化(open() 尚未被调用)。
  1:请求已经建立,但是还没有发送(send()没有被调用)。
  2:请求已经发送并正在处理中(通常现在可以从响应中获取内容头)。
  3:请求正在处理中;通常响应中有部分数据可用,但服务器还没有完成响应的生成。
  4:响应完成;您可以获取并使用服务器的响应。
  2、获取信息
  我们先爬取网页数据,然后过滤掉有用的部分,然后慢慢添加条件爬取。
  设置 dmt = .Document
  对于 i = 0 到 dmt.all.Length-1
  设置 htMent = dmt.all(i)
  使用 ActiveSheet
  .Cells(i + 2, "A") = htMent.tagName
  .Cells(i + 2, "B") = TypeName(htMent)
  .Cells(i + 2, "C") = htMent.ID
  .Cells(i + 2, "D") = htMent.Name
  .Cells(i + 2, "E") = htMent.Value
  .Cells(i + 2, "F") = htMent.Text
  .Cells(i + 2, "G") = htMent.innerText
  接下来我
  这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。还有其他几种方法:
  getElementById("IDName"):返回第一个带有IDName的标签 getElementsByName("a"):返回所有标签,返回值为集合 getElementsByClassName("css"):返回所有样式名称为css的标签,返回该值是一个集合。
  这些更方便用于在抓取所有页面内容后帮助过滤有效信息。

浏览器抓取网页( Selenium处理多窗口场景多个窗口识别与切换(图))

网站优化优采云 发表了文章 • 0 个评论 • 97 次浏览 • 2021-10-27 22:09 • 来自相关话题

  浏览器抓取网页(
Selenium处理多窗口场景多个窗口识别与切换(图))
  网页框架及多窗口、多浏览器、上传弹窗处理
  Selenium 处理多窗口场景下的多窗口识别和切换
  单击某些链接将重新打开一个窗口。在这种情况下,如果要在新页面上进行操作,则必须先切换窗口。获取的窗口的唯一标识由一个句柄表示,因此您只需切换句柄即可在多个页面之间灵活操作。
  处理流程:
  1.先获取当前窗口的句柄
  driver.current_window_handle
  2.再次获取所有窗口句柄
  driver.window_handles
  3. 判断是否是你要操作的窗口,如果是,可以对该窗口进行操作,如果不是,则跳转到另一个窗口,对另一个窗口进行操作
  driver.switch_to_window
  Selenium处理帧多帧识别与切换
  做web自动化的时候,如果找不到某个元素,可能是因为该元素在iframe中
  框架是 HTML 中的框架。HTML中所谓的frame,是指在同一个浏览器中可以显示多个页面
  基于HTML的框架可以分为垂直框架和水平框架(cols,rows)
  车架分类
  frame标签收录三种类型:frameset、frame、iframe
  框架集和普通标签一样,不会影响正常定位。您可以使用任何 index、id、name、webelement 方法来定位框架
  Frame 和 iframe 对于 selenium 定位是相同的。Selenium 有一组方法来操作框架:
  driver.switch_to.frame() # 根据元素id或者index切换frame
driver.switch_to.default_content() # 切换到默认frame
driver.switch_to.parent_frame() # 切换到父级frame
  未嵌套的 iframe
  driver.switch_to_frame("frame的id")
driver.switch_to_frame("frame-index") # frame无id的时候可以根据索引来处理,索引从0开始,如:driver.switch_to_frame(0)
  嵌套 iframe
  这时候先进入iframe的父节点,再进入子节点,然后进行操作
  driver.switch_to.frame("父节点")
driver.switch_to.frame("子节点")
  多浏览器处理
  通过传递不同的参数来处理不同的浏览器,比如将浏览器类型作为参数传递给os.getenv方法,然后根据传递的参数判断选择不同的浏览器
  def setup(self):
browser = os.getenv("browser")
if browser == &#39;firefox&#39;:
self.driver = webdriver.Firefox()
elif browser == &#39;chrome&#39;
self.driver = webdriver.Chrome()
  文件上传处理输入标签
  可以直接使用send_keys(文件地址)上传文件:
  el = driver.find_element_by_id("上传按钮id")
el.send_keys("文件路径+文件名")
  子弹处理机制
  在页面上操作时,会遇到一些由JavaScript生成的alert、confirm、提示弹窗。这时候可以使用switch_to.alert()方法来定位。然后使用text/accept/dismiss/send_keys等方法进行操作。
  switch_to.alert() # 获取当前页面上的警告框
text() # 返回alert/confirm/prompt中的文字信息
accept() # 接受现有警告框
dissmiss() # 解散现有警告框
send_keys(keysToSend) # 发送文本至警告框,keysToSend:将文本发送至警告框
  最简单粗暴的判断弹窗是 JavaScript 生成的警报还是 div 组件的方法:无法在浏览器的开发者工具中定位警报 查看全部

  浏览器抓取网页(
Selenium处理多窗口场景多个窗口识别与切换(图))
  网页框架及多窗口、多浏览器、上传弹窗处理
  Selenium 处理多窗口场景下的多窗口识别和切换
  单击某些链接将重新打开一个窗口。在这种情况下,如果要在新页面上进行操作,则必须先切换窗口。获取的窗口的唯一标识由一个句柄表示,因此您只需切换句柄即可在多个页面之间灵活操作。
  处理流程:
  1.先获取当前窗口的句柄
  driver.current_window_handle
  2.再次获取所有窗口句柄
  driver.window_handles
  3. 判断是否是你要操作的窗口,如果是,可以对该窗口进行操作,如果不是,则跳转到另一个窗口,对另一个窗口进行操作
  driver.switch_to_window
  Selenium处理帧多帧识别与切换
  做web自动化的时候,如果找不到某个元素,可能是因为该元素在iframe中
  框架是 HTML 中的框架。HTML中所谓的frame,是指在同一个浏览器中可以显示多个页面
  基于HTML的框架可以分为垂直框架和水平框架(cols,rows)
  车架分类
  frame标签收录三种类型:frameset、frame、iframe
  框架集和普通标签一样,不会影响正常定位。您可以使用任何 index、id、name、webelement 方法来定位框架
  Frame 和 iframe 对于 selenium 定位是相同的。Selenium 有一组方法来操作框架:
  driver.switch_to.frame() # 根据元素id或者index切换frame
driver.switch_to.default_content() # 切换到默认frame
driver.switch_to.parent_frame() # 切换到父级frame
  未嵌套的 iframe
  driver.switch_to_frame("frame的id")
driver.switch_to_frame("frame-index") # frame无id的时候可以根据索引来处理,索引从0开始,如:driver.switch_to_frame(0)
  嵌套 iframe
  这时候先进入iframe的父节点,再进入子节点,然后进行操作
  driver.switch_to.frame("父节点")
driver.switch_to.frame("子节点")
  多浏览器处理
  通过传递不同的参数来处理不同的浏览器,比如将浏览器类型作为参数传递给os.getenv方法,然后根据传递的参数判断选择不同的浏览器
  def setup(self):
browser = os.getenv("browser")
if browser == &#39;firefox&#39;:
self.driver = webdriver.Firefox()
elif browser == &#39;chrome&#39;
self.driver = webdriver.Chrome()
  文件上传处理输入标签
  可以直接使用send_keys(文件地址)上传文件:
  el = driver.find_element_by_id("上传按钮id")
el.send_keys("文件路径+文件名")
  子弹处理机制
  在页面上操作时,会遇到一些由JavaScript生成的alert、confirm、提示弹窗。这时候可以使用switch_to.alert()方法来定位。然后使用text/accept/dismiss/send_keys等方法进行操作。
  switch_to.alert() # 获取当前页面上的警告框
text() # 返回alert/confirm/prompt中的文字信息
accept() # 接受现有警告框
dissmiss() # 解散现有警告框
send_keys(keysToSend) # 发送文本至警告框,keysToSend:将文本发送至警告框
  最简单粗暴的判断弹窗是 JavaScript 生成的警报还是 div 组件的方法:无法在浏览器的开发者工具中定位警报

浏览器抓取网页(新的CSS文件,重新渲染页面的charset属性值!)

网站优化优采云 发表了文章 • 0 个评论 • 143 次浏览 • 2021-10-27 09:14 • 来自相关话题

  浏览器抓取网页(新的CSS文件,重新渲染页面的charset属性值!)
  3)HTML 页面中的字符集属性值
  4.浏览器对HTML页面进行渲染和布局:
  1)。浏览器开始加载html代码,发现&lt;head&gt;标签中有一个&lt;link&gt;标签,引用了外部的CSS文件;
  2)。浏览器再次发送CSS文件请求,服务器返回这个CSS文件;
  3)。浏览器继续加载html&lt;body&gt;部分的代码,已经获取到css文件,可以渲染页面了;
  4)。浏览器在代码中找到引用图像的 &lt;img&gt; 标记并向服务器发送请求。这时候浏览器不会等到图片下载完成,而是会继续渲染后面的代码;
  服务器返回图片文件。由于图片占用一定面积,影响后面段落的排列,浏览器需要返回,重新渲染这部分代码;
  5)。浏览器发现&lt;script&gt;标签收录一行Javascript代码,快速运行;
  6)。Javascript 脚本执行了这个语句,它指示浏览器在代码中隐藏某个 &lt;div&gt; (style.display="none")。杯具,这样的元素突然少了,浏览器不得不重新渲染这部分代码;
  7)。终于等到了&lt;/html&gt;的到来,浏览器泪流满面……
  8)。等等,还没完,用户点击界面中的“皮肤”按钮,Javascript让浏览器改变&lt;link&gt;标签的CSS路径;
  9)。浏览器把大家召集到这里&lt;div&gt;&lt;span&gt;&lt;ul&gt;&lt;li&gt;,“大家收拾收拾,我们要回来了……”,浏览器向服务器CSS文件请求更新,重新渲染页面.
  注意:Win10打开host文件的方法:在运行中输入(win+R):C:\Windows\System32\drivers\etc。
  2.2 JavaScript 引擎2.2.1 什么是 JavaScript 引擎?
  “JavaScript 引擎”通常被称为一种虚拟机。“虚拟机”是指给定计算机系统的软件驱动模拟器。虚拟机的种类很多,根据它们模拟或替代真实物理机的准确程度来分类。
  2.2.2 JavaScript 引擎是做什么的?
  JavaScript 的基本工作是将开发者编写的 JavaScript 代码转换为浏览器可以理解甚至在应用程序中使用的最优化的快捷代码。例如,当你写 var a = 1 + 1; 这样一段代码,JavaScript引擎所做的就是理解(解析)你的代码,并将a的值改为2。
  2.2.3 主要的 JavaScript 引擎有哪些?
  WebKit 的 JavaScriptCore 和 Google 的 V8 引擎。
  2.2.4 JavaScriptCore和V8引擎解析源码的过程
  JavaScriptCore 执行一系列步骤来解释和优化脚本:
  1) 首先进行词法分析,即将源代码分解为一系列具有明确含义的符号或字符串。
  2) 然后用语法分析器对这些符号进行分析,构建成语法树。
  3) 然后四个JIT(Just-In-Time)进程开始参与,分析并执行解析器生成的字节码。
  简单来说,JavaScript 引擎会加载你的源代码,将其分解为字符串(也称为分词),将这些字符串转换为编译器可以理解的字节码,然后执行这些字节码。
  Google 的 V8 引擎是用 C++ 编写的,它还可以编译和执行 JavaScript 源代码,处理内存分配和垃圾采集。它被设计为由两个编译器组成,可以直接将源代码编译成机器码:
  1) Full-codegen:输出未优化代码的快速编译器
  2) Crankshaft:输出高效和优化代码的慢速编译器
  如果 Crankshaft 确定要优化的代码是 Full-codegen 生成的未优化代码,它将替换 Full-codegen。这个过程称为“曲轴加工”。
  一旦在编译过程中生成机器码,引擎就会向浏览器公开所有数据类型、运算符、对象、ECMA 标准中指定的函数或任何需要在运行时使用的内容。NativeScript 就是这种情况。
  3.Chrome浏览器的开发者工具面板介绍3.1 Chrome浏览器的开发者工具如何打开:1)功能键F12或Ctrl+Shift+j或Ctrl+Shift+j打开;
  2) 打开浏览器右上角的用户设置下拉菜单,选择更多工具,然后选择开发者工具打开开发者工具。
  3.2 开发者工具工具栏中常用面板介绍
  元素:在网页源代码HTML中查找任意元素,手动修改任意元素的属性和样式,在浏览器中实时获取反馈。
  Console:记录开发者在开发过程中的日志信息,可以作为命令行Shell与JS交互。
  Sources:Sources 功能面板是一个资源面板。它主要分为四个部分。这四个部分不是独立的。它们相互关联,相互作用,实现了一个重要的功能:监控js在执行期间的活动。简单地说,它是一个断点。
  网络:对网页发起请求后,分析分析HTTP请求后得到的请求资源信息(包括状态、资源类型、大小、花费时间等)。基于此可以优化网络性能。
  Timeline:记录并分析网站生命周期中发生的各种事件,从而提高网页运行时间的性能。
  Profiles:如果你需要更多Timeline可以提供的信息,可以尝试Profiles,比如记录JS CPU执行时间细节,显示JS对象和相关DOM节点的内存消耗,记录内存分配细节。
  Application:记录网站加载的所有资源信息,包括存储数据(Local Storage、Session Storage、IndexedDB、Web SQL、Cookies)、缓存数据、字体、图片、脚本、样式表等。
  安全性:判断当前网页是否安全。
  审计:诊断当前网页使用情况和网页性能,并给出一些优化建议。例如,列出所有未使用的 CSS 文件。
  3.2.1 元素面板 如何打开元素面板:
  1) 打开开发者工具后,在开发者工具面板中选择Element选项卡;
  2) 打开浏览器后,右击查看(火狐浏览器是“评论元素”)
  元素面板的常用功能:
  1)实时编辑DOM节点
  在 Element 面板的 DOM 树视图中,呈现了当前页面中的所有 DOM 节点。用鼠标双击任意 DOM 节点来修改属性值。修改完成后,按回车键。浏览器将立即显示修改后的效果。
  注意:这种及时的修改只是临时修改,只能用于调试。在实际应用中,调试后往往在本地代码中修改正确的属性值。
  2)实时编辑CSS样式
  在Element面板中还可以实时修改当前页面DOM元素的样式,修改后的元素样式会立即生效。
  实时修改 DOM 元素样式的步骤:
  首先选择这个 DOM 元素。如果没有打开开发者工具,可以在要修改的DOM元素上右键--&gt;查看元素,然后在控制面板右侧选择Style,可以看到当前所有的CSS样式DOM元素,双击即可修改 的CSS属性值,修改立即生效。如果你已经打开了开发者工具,可以先点击开发者工具面板最左边的放大镜,然后在页面上点击要修改的DOM元素,选择这个要调试的DOM元素。此时,控制面板右侧的 Style 显示了当前选择的 DOM 元素的 CSS 属性。双击属性值进行修改。
  注意:这种及时的修改只是临时修改,只能用于调试。在实际应用中,调试后往往在本地代码中修改正确的属性值。
  3)打开盒子模型,调试框架参数
  点击右边的Computed选项卡可以看到当前选中元素的box模型参数,所有的值都可以修改。点击不同位置(上、下、左、右)可以修改padding、border、margin属性的值。也可以通过修改盒子模型中间的数据来改变元素的宽高。浏览器中的当前元素在修改时会响应式变化,左侧的Element面板会自动添加对应的Stylt属性值,当页面显示的样式符合要求时,可以停止修改,然后复制将Element中生成的属性值写入代码中,样式可以永久修改。
  3.2.2 控制台面板
  1)查看脚本运行过程中的异常信息;
  因为 JavaScript 是弱语言类型,所以语法要求不严格。而且JavaScript是解释型语言,代码中不会出现中文标点等错误提示,只有运行结束才会向控制台抛出异常。
  如果想查看具体的异常信息,直接点击右边的异常信息控制台,带我们到程序中出错的具体位置:
  2)打印日志信息;
  上面说到简单的调试,可以使用alert方法在弹窗中显示想要查看的信息。但是,警报有一个缺点:它会阻塞程序,无法显示对象的详细信息。当弹出多条消息时,您必须单击确定才能在下一个弹出窗口中查看信息。这些问题可以通过使用控制台提供的打印日志的方法完美解决。
  Console中打印日志常用的方法有:
  A) console.log("info") 显示一般的基本日志信息。当需要显示的基本日志信息过多时,可以使用console.grop()方法对日志进行分组;
  B) Console.warn("info") 显示带有黄色小图标的警告信息;
  C) Console.error("info") 用红色小图标显示错误信息;
  Console打印日志的使用场景:
  A) 在代码中使用console.log()打印日志信息:
  B) 使用 console.log() 直接在控制台打印信息:
  C) 如何清除控制台中的信息:
  直接在控制台输出console.clear()方法,按回车清除控制台上的信息。另一种方法是直接点击控制台左上角的清除日志按钮来清除日志信息。
  3)运行 JavaScript 脚本
  控制台还有一个神奇的功能就是可以运行你输入的JavaScript脚本,非常实用。
  实际场景一:快速验证JavaScript中的方法。
  根据输出一个十进制数,要求:只保留两位小数。通过查看JavaScript API,发现Number对象有一个toFixed方法来指定小数位的长度,但是没有例子。最快的尝试方法是在控制台上验证:
  console.log(new Number("3.1415926").toFixed(2));
  实际场景二:在控制台输入JavaScript方法时有提示。
  通过文档获取指定id的节点的方法是document.getElementById("id")。但是由于MyEclipse,在Eclipse中编写JavaScript时可能没有提示。太痛苦了,容易出错。这时候就可以通过控制台上的方法提示来完成方法了。
  如上图:我们不需要完全输入方法名称,只需使用键盘的上下键选择需要的方法,根据提示按回车即可。
  D) 控制台面板中的全局搜索(快捷键 Ctrl+Shift+F)
  打开全局搜索,输入关键字,可以搜索到所有收录该关键字的文件。
  应用场景:刚到公司,不熟悉公司业务。登录页面有几千行代码,我就是想找个登录方式,这时候输入登录方式名就可以搜索到登录方式所在的页面了。单击它可以找到此方法。
  3.2.3 源面板
  源资源面板显示加载当前页面所需的所有资源。
  在 Source 面板中,您可以找到当前浏览器加载的页面,然后调试其中的 JavaScript 脚本。在使用 Chrome 开发者工具的过程中会给出具体说明。
  3.2.4 网络(网络)面板
  网络面板可以在页面上记录网络请求的详细信息。请求发起后,对HTTP请求进行解析后得到的请求资源信息(包括状态、资源信息、大小、使用时间、Request和Response等)可以基于此进行网络性能优化。
  控件控制网络的外观和功能。过滤器精确控制请求表中显示的内容。概览显示获取资源的时间线信息。Requests Table 显示了获取资源前后的所有资源信息。单击资源名称可以查看资源的详细信息。摘要显示请求总数、数据传输量和加载时间信息。
  NetWork面板的Requests Table收录了HTTP请求和响应的具体信息,是常用的。
  命名资源名称,点击名称可以查看资源的详细信息,包括Headers、Preview、Response、Cookies、Timing。StatusHTTP 状态代码。类型 请求的资源 MIME 类型。Initiator 标记发起请求的对象或进程(请求源)。解析器:请求是由 Chrome 的 HTML 解析器发起的。重定向:请求由 HTTP 页面重定向发起。Script:请求由Script脚本发起。其他:请求由其他进程发起,例如用户点击链接跳转到另一个页面或在地址栏中输入 URL 地址。大小 从服务器下载的文件和请求资源的大小。如果是从缓存中获取的资源,这一栏会显示(from cache) Time 请求或下载的时间,从发起请求到获得响应的总时间。时间线显示所有网络请求的视觉瀑布(时间状态轴)。点击时间轴可以查看请求的详细信息,点击列头可以根据指定的字段进行排序。
  查看特定资源的详细信息
  点击资源名称,可以查看资源的详细信息。根据选择的资源类型显示的信息也不同,可能包括以下Tab信息:
  Headers 资源的 HTTP 头信息。预览根据您选择的资源类型(JSON、图像、文本)显示相应的预览。响应显示 HTTP 响应信息。Cookies 显示资源在 HTTP Request 和 Response 过程中的 cookie 信息。Timing 显示了资源各部分在整个请求生命周期中所花费的时间。
  对以上4个Tab详细解释每个功能: 查看全部

  浏览器抓取网页(新的CSS文件,重新渲染页面的charset属性值!)
  3)HTML 页面中的字符集属性值
  4.浏览器对HTML页面进行渲染和布局:
  1)。浏览器开始加载html代码,发现&lt;head&gt;标签中有一个&lt;link&gt;标签,引用了外部的CSS文件;
  2)。浏览器再次发送CSS文件请求,服务器返回这个CSS文件;
  3)。浏览器继续加载html&lt;body&gt;部分的代码,已经获取到css文件,可以渲染页面了;
  4)。浏览器在代码中找到引用图像的 &lt;img&gt; 标记并向服务器发送请求。这时候浏览器不会等到图片下载完成,而是会继续渲染后面的代码;
  服务器返回图片文件。由于图片占用一定面积,影响后面段落的排列,浏览器需要返回,重新渲染这部分代码;
  5)。浏览器发现&lt;script&gt;标签收录一行Javascript代码,快速运行;
  6)。Javascript 脚本执行了这个语句,它指示浏览器在代码中隐藏某个 &lt;div&gt; (style.display="none")。杯具,这样的元素突然少了,浏览器不得不重新渲染这部分代码;
  7)。终于等到了&lt;/html&gt;的到来,浏览器泪流满面……
  8)。等等,还没完,用户点击界面中的“皮肤”按钮,Javascript让浏览器改变&lt;link&gt;标签的CSS路径;
  9)。浏览器把大家召集到这里&lt;div&gt;&lt;span&gt;&lt;ul&gt;&lt;li&gt;,“大家收拾收拾,我们要回来了……”,浏览器向服务器CSS文件请求更新,重新渲染页面.
  注意:Win10打开host文件的方法:在运行中输入(win+R):C:\Windows\System32\drivers\etc。
  2.2 JavaScript 引擎2.2.1 什么是 JavaScript 引擎?
  “JavaScript 引擎”通常被称为一种虚拟机。“虚拟机”是指给定计算机系统的软件驱动模拟器。虚拟机的种类很多,根据它们模拟或替代真实物理机的准确程度来分类。
  2.2.2 JavaScript 引擎是做什么的?
  JavaScript 的基本工作是将开发者编写的 JavaScript 代码转换为浏览器可以理解甚至在应用程序中使用的最优化的快捷代码。例如,当你写 var a = 1 + 1; 这样一段代码,JavaScript引擎所做的就是理解(解析)你的代码,并将a的值改为2。
  2.2.3 主要的 JavaScript 引擎有哪些?
  WebKit 的 JavaScriptCore 和 Google 的 V8 引擎。
  2.2.4 JavaScriptCore和V8引擎解析源码的过程
  JavaScriptCore 执行一系列步骤来解释和优化脚本:
  1) 首先进行词法分析,即将源代码分解为一系列具有明确含义的符号或字符串。
  2) 然后用语法分析器对这些符号进行分析,构建成语法树。
  3) 然后四个JIT(Just-In-Time)进程开始参与,分析并执行解析器生成的字节码。
  简单来说,JavaScript 引擎会加载你的源代码,将其分解为字符串(也称为分词),将这些字符串转换为编译器可以理解的字节码,然后执行这些字节码。
  Google 的 V8 引擎是用 C++ 编写的,它还可以编译和执行 JavaScript 源代码,处理内存分配和垃圾采集。它被设计为由两个编译器组成,可以直接将源代码编译成机器码:
  1) Full-codegen:输出未优化代码的快速编译器
  2) Crankshaft:输出高效和优化代码的慢速编译器
  如果 Crankshaft 确定要优化的代码是 Full-codegen 生成的未优化代码,它将替换 Full-codegen。这个过程称为“曲轴加工”。
  一旦在编译过程中生成机器码,引擎就会向浏览器公开所有数据类型、运算符、对象、ECMA 标准中指定的函数或任何需要在运行时使用的内容。NativeScript 就是这种情况。
  3.Chrome浏览器的开发者工具面板介绍3.1 Chrome浏览器的开发者工具如何打开:1)功能键F12或Ctrl+Shift+j或Ctrl+Shift+j打开;
  2) 打开浏览器右上角的用户设置下拉菜单,选择更多工具,然后选择开发者工具打开开发者工具。
  3.2 开发者工具工具栏中常用面板介绍
  元素:在网页源代码HTML中查找任意元素,手动修改任意元素的属性和样式,在浏览器中实时获取反馈。
  Console:记录开发者在开发过程中的日志信息,可以作为命令行Shell与JS交互。
  Sources:Sources 功能面板是一个资源面板。它主要分为四个部分。这四个部分不是独立的。它们相互关联,相互作用,实现了一个重要的功能:监控js在执行期间的活动。简单地说,它是一个断点。
  网络:对网页发起请求后,分析分析HTTP请求后得到的请求资源信息(包括状态、资源类型、大小、花费时间等)。基于此可以优化网络性能。
  Timeline:记录并分析网站生命周期中发生的各种事件,从而提高网页运行时间的性能。
  Profiles:如果你需要更多Timeline可以提供的信息,可以尝试Profiles,比如记录JS CPU执行时间细节,显示JS对象和相关DOM节点的内存消耗,记录内存分配细节。
  Application:记录网站加载的所有资源信息,包括存储数据(Local Storage、Session Storage、IndexedDB、Web SQL、Cookies)、缓存数据、字体、图片、脚本、样式表等。
  安全性:判断当前网页是否安全。
  审计:诊断当前网页使用情况和网页性能,并给出一些优化建议。例如,列出所有未使用的 CSS 文件。
  3.2.1 元素面板 如何打开元素面板:
  1) 打开开发者工具后,在开发者工具面板中选择Element选项卡;
  2) 打开浏览器后,右击查看(火狐浏览器是“评论元素”)
  元素面板的常用功能:
  1)实时编辑DOM节点
  在 Element 面板的 DOM 树视图中,呈现了当前页面中的所有 DOM 节点。用鼠标双击任意 DOM 节点来修改属性值。修改完成后,按回车键。浏览器将立即显示修改后的效果。
  注意:这种及时的修改只是临时修改,只能用于调试。在实际应用中,调试后往往在本地代码中修改正确的属性值。
  2)实时编辑CSS样式
  在Element面板中还可以实时修改当前页面DOM元素的样式,修改后的元素样式会立即生效。
  实时修改 DOM 元素样式的步骤:
  首先选择这个 DOM 元素。如果没有打开开发者工具,可以在要修改的DOM元素上右键--&gt;查看元素,然后在控制面板右侧选择Style,可以看到当前所有的CSS样式DOM元素,双击即可修改 的CSS属性值,修改立即生效。如果你已经打开了开发者工具,可以先点击开发者工具面板最左边的放大镜,然后在页面上点击要修改的DOM元素,选择这个要调试的DOM元素。此时,控制面板右侧的 Style 显示了当前选择的 DOM 元素的 CSS 属性。双击属性值进行修改。
  注意:这种及时的修改只是临时修改,只能用于调试。在实际应用中,调试后往往在本地代码中修改正确的属性值。
  3)打开盒子模型,调试框架参数
  点击右边的Computed选项卡可以看到当前选中元素的box模型参数,所有的值都可以修改。点击不同位置(上、下、左、右)可以修改padding、border、margin属性的值。也可以通过修改盒子模型中间的数据来改变元素的宽高。浏览器中的当前元素在修改时会响应式变化,左侧的Element面板会自动添加对应的Stylt属性值,当页面显示的样式符合要求时,可以停止修改,然后复制将Element中生成的属性值写入代码中,样式可以永久修改。
  3.2.2 控制台面板
  1)查看脚本运行过程中的异常信息;
  因为 JavaScript 是弱语言类型,所以语法要求不严格。而且JavaScript是解释型语言,代码中不会出现中文标点等错误提示,只有运行结束才会向控制台抛出异常。
  如果想查看具体的异常信息,直接点击右边的异常信息控制台,带我们到程序中出错的具体位置:
  2)打印日志信息;
  上面说到简单的调试,可以使用alert方法在弹窗中显示想要查看的信息。但是,警报有一个缺点:它会阻塞程序,无法显示对象的详细信息。当弹出多条消息时,您必须单击确定才能在下一个弹出窗口中查看信息。这些问题可以通过使用控制台提供的打印日志的方法完美解决。
  Console中打印日志常用的方法有:
  A) console.log("info") 显示一般的基本日志信息。当需要显示的基本日志信息过多时,可以使用console.grop()方法对日志进行分组;
  B) Console.warn("info") 显示带有黄色小图标的警告信息;
  C) Console.error("info") 用红色小图标显示错误信息;
  Console打印日志的使用场景:
  A) 在代码中使用console.log()打印日志信息:
  B) 使用 console.log() 直接在控制台打印信息:
  C) 如何清除控制台中的信息:
  直接在控制台输出console.clear()方法,按回车清除控制台上的信息。另一种方法是直接点击控制台左上角的清除日志按钮来清除日志信息。
  3)运行 JavaScript 脚本
  控制台还有一个神奇的功能就是可以运行你输入的JavaScript脚本,非常实用。
  实际场景一:快速验证JavaScript中的方法。
  根据输出一个十进制数,要求:只保留两位小数。通过查看JavaScript API,发现Number对象有一个toFixed方法来指定小数位的长度,但是没有例子。最快的尝试方法是在控制台上验证:
  console.log(new Number("3.1415926").toFixed(2));
  实际场景二:在控制台输入JavaScript方法时有提示。
  通过文档获取指定id的节点的方法是document.getElementById("id")。但是由于MyEclipse,在Eclipse中编写JavaScript时可能没有提示。太痛苦了,容易出错。这时候就可以通过控制台上的方法提示来完成方法了。
  如上图:我们不需要完全输入方法名称,只需使用键盘的上下键选择需要的方法,根据提示按回车即可。
  D) 控制台面板中的全局搜索(快捷键 Ctrl+Shift+F)
  打开全局搜索,输入关键字,可以搜索到所有收录该关键字的文件。
  应用场景:刚到公司,不熟悉公司业务。登录页面有几千行代码,我就是想找个登录方式,这时候输入登录方式名就可以搜索到登录方式所在的页面了。单击它可以找到此方法。
  3.2.3 源面板
  源资源面板显示加载当前页面所需的所有资源。
  在 Source 面板中,您可以找到当前浏览器加载的页面,然后调试其中的 JavaScript 脚本。在使用 Chrome 开发者工具的过程中会给出具体说明。
  3.2.4 网络(网络)面板
  网络面板可以在页面上记录网络请求的详细信息。请求发起后,对HTTP请求进行解析后得到的请求资源信息(包括状态、资源信息、大小、使用时间、Request和Response等)可以基于此进行网络性能优化。
  控件控制网络的外观和功能。过滤器精确控制请求表中显示的内容。概览显示获取资源的时间线信息。Requests Table 显示了获取资源前后的所有资源信息。单击资源名称可以查看资源的详细信息。摘要显示请求总数、数据传输量和加载时间信息。
  NetWork面板的Requests Table收录了HTTP请求和响应的具体信息,是常用的。
  命名资源名称,点击名称可以查看资源的详细信息,包括Headers、Preview、Response、Cookies、Timing。StatusHTTP 状态代码。类型 请求的资源 MIME 类型。Initiator 标记发起请求的对象或进程(请求源)。解析器:请求是由 Chrome 的 HTML 解析器发起的。重定向:请求由 HTTP 页面重定向发起。Script:请求由Script脚本发起。其他:请求由其他进程发起,例如用户点击链接跳转到另一个页面或在地址栏中输入 URL 地址。大小 从服务器下载的文件和请求资源的大小。如果是从缓存中获取的资源,这一栏会显示(from cache) Time 请求或下载的时间,从发起请求到获得响应的总时间。时间线显示所有网络请求的视觉瀑布(时间状态轴)。点击时间轴可以查看请求的详细信息,点击列头可以根据指定的字段进行排序。
  查看特定资源的详细信息
  点击资源名称,可以查看资源的详细信息。根据选择的资源类型显示的信息也不同,可能包括以下Tab信息:
  Headers 资源的 HTTP 头信息。预览根据您选择的资源类型(JSON、图像、文本)显示相应的预览。响应显示 HTTP 响应信息。Cookies 显示资源在 HTTP Request 和 Response 过程中的 cookie 信息。Timing 显示了资源各部分在整个请求生命周期中所花费的时间。
  对以上4个Tab详细解释每个功能:

浏览器抓取网页(浏览器抓取网页,可以抓一些本站的ajax接口)

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2021-10-23 19:01 • 来自相关话题

  浏览器抓取网页(浏览器抓取网页,可以抓一些本站的ajax接口)
  浏览器抓取网页,可以抓一些本站的ajax接口,我们在爬虫前会存一个可执行的js代码文件,这样抓取网页时只需加载这个代码文件即可,类似与模拟浏览器。还可以抓取网页任意内容,但是不能获取后端页面地址及页面表单信息,所以一般不会存为文件,因为不能全局代码,而且获取了后端页面也不能全局代码。抓取出来的数据也有可能是无效数据。
  所以如果把抓取到的数据做一些转换处理也可以提高爬虫的性能。1.通过一个简单的整数转整数运算来提高性能,这里的整数转整数只是一个简单的数组转整数的运算,我们只能转整数,也就是0-9里的所有整数,这样效率肯定是比较低的。2.通过json或xml里面的api来提高爬虫性能,我们可以抓取一些重要的信息,可以在request里用一个双花括号将相应字段写到这个数组里,然后通过一个转换函数将这个双花括号里的所有字段转换成字符串表达式,然后再存入对应的xml解析方法即可。
  另外由于这个双花括号里的字段是类似unicode等unicode编码不统一的字符串,所以xml解析方法要正确对待unicode编码,这个方法能将会得到完整的字符串。比如这个asp程序在收到我们的xml文件后,会将它转换成csv格式的文件,同时获取表单里的type属性,type是0就是数字,type是1就是字符串,就可以通过html.xpath获取表单里的一切内容了。
  3.使用加密算法:在ajax接口进行请求时,为了防止在后端返回的内容被盗号,所以前端必须有权限检测。加密算法(rsa,skl,dfa等):为了解决这一问题,我们可以通过xmlhttprequest实现加密机制,那么我们再在request里加一个端口就可以了。4.使用正则表达式:如果我们想将可能重复的部分字符串匹配出来,比如标点符号。
  使用正则表达式正则表达式有成千上万个规则,每一个规则都可以用来匹配数千个字符,但是正则表达式的结构为字符串关键字匹配,参数前匹配,参数后匹配。因此可以对待每一个规则写一个正则表达式语法规则,这样就可以将反复出现的规则用一个表达式匹配出来。5.使用正则表达式的递归:通过递归方法,可以使前端请求响应时间达到直接使用一个http来请求,接受http响应进行处理,然后将请求响应里的相应可以转换成某一固定的字符串。
  例如我们想将本站登录接口的返回值解析为email,qq号。那么我们可以调用token函数(-address)将本站登录接口的返回值转换成emailqq号,从而实现某一请求中某条浏览器获取信息。正则表达式的匹配规则(-palindrome):匹配所有'^palindrome'的字符,匹配所有'^a'。 查看全部

  浏览器抓取网页(浏览器抓取网页,可以抓一些本站的ajax接口)
  浏览器抓取网页,可以抓一些本站的ajax接口,我们在爬虫前会存一个可执行的js代码文件,这样抓取网页时只需加载这个代码文件即可,类似与模拟浏览器。还可以抓取网页任意内容,但是不能获取后端页面地址及页面表单信息,所以一般不会存为文件,因为不能全局代码,而且获取了后端页面也不能全局代码。抓取出来的数据也有可能是无效数据。
  所以如果把抓取到的数据做一些转换处理也可以提高爬虫的性能。1.通过一个简单的整数转整数运算来提高性能,这里的整数转整数只是一个简单的数组转整数的运算,我们只能转整数,也就是0-9里的所有整数,这样效率肯定是比较低的。2.通过json或xml里面的api来提高爬虫性能,我们可以抓取一些重要的信息,可以在request里用一个双花括号将相应字段写到这个数组里,然后通过一个转换函数将这个双花括号里的所有字段转换成字符串表达式,然后再存入对应的xml解析方法即可。
  另外由于这个双花括号里的字段是类似unicode等unicode编码不统一的字符串,所以xml解析方法要正确对待unicode编码,这个方法能将会得到完整的字符串。比如这个asp程序在收到我们的xml文件后,会将它转换成csv格式的文件,同时获取表单里的type属性,type是0就是数字,type是1就是字符串,就可以通过html.xpath获取表单里的一切内容了。
  3.使用加密算法:在ajax接口进行请求时,为了防止在后端返回的内容被盗号,所以前端必须有权限检测。加密算法(rsa,skl,dfa等):为了解决这一问题,我们可以通过xmlhttprequest实现加密机制,那么我们再在request里加一个端口就可以了。4.使用正则表达式:如果我们想将可能重复的部分字符串匹配出来,比如标点符号。
  使用正则表达式正则表达式有成千上万个规则,每一个规则都可以用来匹配数千个字符,但是正则表达式的结构为字符串关键字匹配,参数前匹配,参数后匹配。因此可以对待每一个规则写一个正则表达式语法规则,这样就可以将反复出现的规则用一个表达式匹配出来。5.使用正则表达式的递归:通过递归方法,可以使前端请求响应时间达到直接使用一个http来请求,接受http响应进行处理,然后将请求响应里的相应可以转换成某一固定的字符串。
  例如我们想将本站登录接口的返回值解析为email,qq号。那么我们可以调用token函数(-address)将本站登录接口的返回值转换成emailqq号,从而实现某一请求中某条浏览器获取信息。正则表达式的匹配规则(-palindrome):匹配所有'^palindrome'的字符,匹配所有'^a'。

浏览器抓取网页(浏览器向主机发起一个HTTP-GET方法请求请求)

网站优化优采云 发表了文章 • 0 个评论 • 107 次浏览 • 2021-10-23 13:14 • 来自相关话题

  浏览器抓取网页(浏览器向主机发起一个HTTP-GET方法请求请求)
  浏览器向主机发起 HTTP-GET 方法消息请求。请求中收录访问的URL,即KeepAlive、长连接,以及User-Agent用户浏览器操作系统信息、编码等。
  第五步:有些服务会做永久重定向响应
  对于大型网站有多个宿主站点,负载均衡或者导入流量提高SEO排名,往往不是直接返回请求页面,而是重定向。返回的状态码不是200OK,而是301302以3开头的重定向码。浏览器得到重定向响应后,在响应消息的Location项中找到重定向地址,浏览器就可以在第一步重新访问。
  重定向的作用:重定向是负载均衡或导入流量,提高SEO排名。使用前端服务器接受请求,然后加载到不同的主机上,可以大大提高站点的并发处理能力;重定向还可以将多个域名的访问集中到一个站点;因为,它会被搜索引擎认为是两个网站,每个中的链接数都会减少,从而降低排名。永久重定向会将两个地址关联起来,搜索引擎会考虑相同的网站以提高排名。
  第 6 步:浏览器跟踪重定向地址
  浏览器知道重定向后的最终访问地址后,再次发送与上述内容相同的http请求。
  第七步:服务器处理请求
  服务器接收获取请求,然后对其进行处理并返回响应。
  第 8 步:服务器发出 HTML 响应
  返回状态码200 OK,表示服务器可以响应请求并返回消息。由于标题中的 Content-type 是“text/html”,浏览器将其呈现为 HTML,而不是下载文件。
  第九步:释放TCP连接
  浏览器所在的主机向服务器发送连接释放消息,然后停止发送数据;
  服务器收到释放消息后发送确认消息,然后将未完成的数据发送到服务器上;
  服务器数据传输完成后,向客户端发送连接释放消息;
  客户端收到消息后,发送确认,然后等待一段时间,才释放TCP连接;
  第十步:浏览器显示页面
  当浏览器还没有完全接受所有的 HTML 文档时,它就已经开始显示这个页面了。浏览器接收返回的数据包,根据浏览器的渲染机制渲染相应的数据。渲染数据后,进行相应的页面呈现和脚步交互。
  第11步:浏览器发送以获取嵌入HTML的其他内容
  比如一些样式文件、图片url、js文件url等,浏览器会通过这些url重新发送请求。请求过程仍然是类似于HTML读取、查询域名、发送请求、重定向等的过程,但是这些静态文件可以缓存在浏览器中,有时访问这些文件不需要经过服务器,但直接从缓存中获取。一些 网站 也使用第三方 CDN 来托管这些静态文件。 查看全部

  浏览器抓取网页(浏览器向主机发起一个HTTP-GET方法请求请求)
  浏览器向主机发起 HTTP-GET 方法消息请求。请求中收录访问的URL,即KeepAlive、长连接,以及User-Agent用户浏览器操作系统信息、编码等。
  第五步:有些服务会做永久重定向响应
  对于大型网站有多个宿主站点,负载均衡或者导入流量提高SEO排名,往往不是直接返回请求页面,而是重定向。返回的状态码不是200OK,而是301302以3开头的重定向码。浏览器得到重定向响应后,在响应消息的Location项中找到重定向地址,浏览器就可以在第一步重新访问。
  重定向的作用:重定向是负载均衡或导入流量,提高SEO排名。使用前端服务器接受请求,然后加载到不同的主机上,可以大大提高站点的并发处理能力;重定向还可以将多个域名的访问集中到一个站点;因为,它会被搜索引擎认为是两个网站,每个中的链接数都会减少,从而降低排名。永久重定向会将两个地址关联起来,搜索引擎会考虑相同的网站以提高排名。
  第 6 步:浏览器跟踪重定向地址
  浏览器知道重定向后的最终访问地址后,再次发送与上述内容相同的http请求。
  第七步:服务器处理请求
  服务器接收获取请求,然后对其进行处理并返回响应。
  第 8 步:服务器发出 HTML 响应
  返回状态码200 OK,表示服务器可以响应请求并返回消息。由于标题中的 Content-type 是“text/html”,浏览器将其呈现为 HTML,而不是下载文件。
  第九步:释放TCP连接
  浏览器所在的主机向服务器发送连接释放消息,然后停止发送数据;
  服务器收到释放消息后发送确认消息,然后将未完成的数据发送到服务器上;
  服务器数据传输完成后,向客户端发送连接释放消息;
  客户端收到消息后,发送确认,然后等待一段时间,才释放TCP连接;
  第十步:浏览器显示页面
  当浏览器还没有完全接受所有的 HTML 文档时,它就已经开始显示这个页面了。浏览器接收返回的数据包,根据浏览器的渲染机制渲染相应的数据。渲染数据后,进行相应的页面呈现和脚步交互。
  第11步:浏览器发送以获取嵌入HTML的其他内容
  比如一些样式文件、图片url、js文件url等,浏览器会通过这些url重新发送请求。请求过程仍然是类似于HTML读取、查询域名、发送请求、重定向等的过程,但是这些静态文件可以缓存在浏览器中,有时访问这些文件不需要经过服务器,但直接从缓存中获取。一些 网站 也使用第三方 CDN 来托管这些静态文件。

浏览器抓取网页(3.分析页码.py分析提取商品内容:利用PyQuery分析源码 )

网站优化优采云 发表了文章 • 0 个评论 • 102 次浏览 • 2021-10-22 05:01 • 来自相关话题

  浏览器抓取网页(3.分析页码.py分析提取商品内容:利用PyQuery分析源码
)
  1.搜索关键词:使用Selenium驱动浏览器获取产品列表。
  2.分析页码并翻页:获取产品页码,模拟翻页,获取后续页面的产品列表。
  3. 分析提取产品内容:使用PyQuery分析源码,分析产品列表。
  4.存入MongoDB:将产品列表信息存入数据库MongoDB。
  蜘蛛.py
   1 from selenium import webdriver
2 from selenium.common.exceptions import TimeoutException
3 from selenium.webdriver.common.by import By
4 from selenium.webdriver.support.ui import WebDriverWait
5 from selenium.webdriver.support import expected_conditions as EC
6 import re
7 from pyquery import PyQuery as pq
8 from urllib.parse import quote
9 import pymongo
10 from config import *
11
12 client = pymongo.MongoClient(MONGO_URL)
13 db = client[MONGO_DB]
14 browser = webdriver.Chrome()
15 wait = WebDriverWait(browser, 10)
16
17 def search():
18 try:
19 browser.get('https://www.taobao.com')
20 input = wait.until(
21 EC.presence_of_element_located((By.CSS_SELECTOR, '#q'))
22 )
23 submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))
24 input.send_keys('美食')
25 submit.click()
26 total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.total')))
27 get_products()
28 return total.text
29 except TimeoutEXception:
30 return search()
31
32 def next_page(page_number):
33 try:
34 input = wait.until(
35 EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input'))
36 )
37 submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))
38 input.clear()
39 input.send_keys(page_number)
40 submit.click()
41 wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page_number)))
42 get_products()
43 except TimeoutException:
44 next_page(page_number)
45
46 def get_products():
47 wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))
48 html = browser.page_source
49 doc = pq(html)
50 items = doc('#mainsrp-itemlist .items .item').items()
51 for item in items:
52 product = {
53 'image': item.find('.pic .img').attr('src'),
54 'price': item.find('.price').text(),
55 'deal': item.find('.deal-cnt').text()[:-3],
56 'title': item.find('.title').text(),
57 'shop': item.find('.shop').text(),
58 'location': item.find('.location').text()
59 }
60 print(product)
61 save_to_mongo(product)
62
63 def save_to_mongo(result):
64 try:
65 if db[MONGO_TABLE].insert(result):
66 print('保存MONGOBD成功',result)
67 except Exception:
68 print('存储到MONGODB失败',result)
69
70 def main():
71 total = search()
72 total = int(re.compile('(\d+)').search(total).group(1))
73 for i in range(2,total+1):
74 next_page(i)
75 browser.close()
76
77 if __name__ == '__main__':
78 main()
  配置文件
  1 MONGO_URL = 'localhost'
2 MONGO_DB = 'taobao'
3 MONGO_TABLE = 'products'
  从Chrome 59版本开始,开始支持Headless模式,即无界面模式,让浏览器在爬行时不会弹出。如果要使用此模式,请将 Chrome 升级至 59 及以上版本。开启 Headless 模式的方法如下:
  chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)
  首先创建一个ChromeOptions对象,然后添加headless参数,然后在初始化Chrome对象时通过chrome_options传递这个ChromeOptions对象,这样我们就可以成功开启Chrome的headless模式了。
  连接火狐浏览器非常简单,只需要做一个改动:
  browser = webdriver.Firefox()
  这里我们改变了浏览器对象的创建方式,这样抓取的时候会使用Firefox浏览器。
  如果不想使用Chrome的Headless模式,也可以使用PhantomJS(它是非界面浏览器)来抓取。爬取时不会弹窗,或者只需要修改WebDriver的语句:
  修改代码:
  client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB]
#browser = webdriver.Chrome()
browser = webdriver.PhantomJS(service_args=SERVICE_ARGS)
wait = WebDriverWait(browser, 10)
browser.set_window_size(1400, 900)
  此外,它还支持命令行配置。比如可以设置缓存和禁止图片加载功能,进一步提高抓取效率:
  MONGO_URL = 'localhost'
MONGO_DB = 'taobao'
MONGO_TABLE = 'products'
SERVICE_ARGS = ['--load-images=false', '--disk-cache=true'] 查看全部

  浏览器抓取网页(3.分析页码.py分析提取商品内容:利用PyQuery分析源码
)
  1.搜索关键词:使用Selenium驱动浏览器获取产品列表。
  2.分析页码并翻页:获取产品页码,模拟翻页,获取后续页面的产品列表。
  3. 分析提取产品内容:使用PyQuery分析源码,分析产品列表。
  4.存入MongoDB:将产品列表信息存入数据库MongoDB。
  蜘蛛.py
   1 from selenium import webdriver
2 from selenium.common.exceptions import TimeoutException
3 from selenium.webdriver.common.by import By
4 from selenium.webdriver.support.ui import WebDriverWait
5 from selenium.webdriver.support import expected_conditions as EC
6 import re
7 from pyquery import PyQuery as pq
8 from urllib.parse import quote
9 import pymongo
10 from config import *
11
12 client = pymongo.MongoClient(MONGO_URL)
13 db = client[MONGO_DB]
14 browser = webdriver.Chrome()
15 wait = WebDriverWait(browser, 10)
16
17 def search():
18 try:
19 browser.get('https://www.taobao.com')
20 input = wait.until(
21 EC.presence_of_element_located((By.CSS_SELECTOR, '#q'))
22 )
23 submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))
24 input.send_keys('美食')
25 submit.click()
26 total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.total')))
27 get_products()
28 return total.text
29 except TimeoutEXception:
30 return search()
31
32 def next_page(page_number):
33 try:
34 input = wait.until(
35 EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input'))
36 )
37 submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))
38 input.clear()
39 input.send_keys(page_number)
40 submit.click()
41 wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page_number)))
42 get_products()
43 except TimeoutException:
44 next_page(page_number)
45
46 def get_products():
47 wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))
48 html = browser.page_source
49 doc = pq(html)
50 items = doc('#mainsrp-itemlist .items .item').items()
51 for item in items:
52 product = {
53 'image': item.find('.pic .img').attr('src'),
54 'price': item.find('.price').text(),
55 'deal': item.find('.deal-cnt').text()[:-3],
56 'title': item.find('.title').text(),
57 'shop': item.find('.shop').text(),
58 'location': item.find('.location').text()
59 }
60 print(product)
61 save_to_mongo(product)
62
63 def save_to_mongo(result):
64 try:
65 if db[MONGO_TABLE].insert(result):
66 print('保存MONGOBD成功',result)
67 except Exception:
68 print('存储到MONGODB失败',result)
69
70 def main():
71 total = search()
72 total = int(re.compile('(\d+)').search(total).group(1))
73 for i in range(2,total+1):
74 next_page(i)
75 browser.close()
76
77 if __name__ == '__main__':
78 main()
  配置文件
  1 MONGO_URL = 'localhost'
2 MONGO_DB = 'taobao'
3 MONGO_TABLE = 'products'
  从Chrome 59版本开始,开始支持Headless模式,即无界面模式,让浏览器在爬行时不会弹出。如果要使用此模式,请将 Chrome 升级至 59 及以上版本。开启 Headless 模式的方法如下:
  chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)
  首先创建一个ChromeOptions对象,然后添加headless参数,然后在初始化Chrome对象时通过chrome_options传递这个ChromeOptions对象,这样我们就可以成功开启Chrome的headless模式了。
  连接火狐浏览器非常简单,只需要做一个改动:
  browser = webdriver.Firefox()
  这里我们改变了浏览器对象的创建方式,这样抓取的时候会使用Firefox浏览器。
  如果不想使用Chrome的Headless模式,也可以使用PhantomJS(它是非界面浏览器)来抓取。爬取时不会弹窗,或者只需要修改WebDriver的语句:
  修改代码:
  client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB]
#browser = webdriver.Chrome()
browser = webdriver.PhantomJS(service_args=SERVICE_ARGS)
wait = WebDriverWait(browser, 10)
browser.set_window_size(1400, 900)
  此外,它还支持命令行配置。比如可以设置缓存和禁止图片加载功能,进一步提高抓取效率:
  MONGO_URL = 'localhost'
MONGO_DB = 'taobao'
MONGO_TABLE = 'products'
SERVICE_ARGS = ['--load-images=false', '--disk-cache=true']

浏览器抓取网页(网页获取和解析速度和性能的应用场景详解! )

网站优化优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2021-10-22 03:17 • 来自相关话题

  浏览器抓取网页(网页获取和解析速度和性能的应用场景详解!
)
  (4)支持代理服务器
  (5) 支持自动cookies管理等。
  Java爬虫开发中应用最广泛的网页获取技术之一。它具有一流的速度和性能。它在功能支持方面相对较低。不支持JS脚本执行、CSS解析、渲染等准浏览器功能。推荐给需要快速获取网页的用户。无需解析脚本和 CSS 场景。
  示例代码如下:
  package cn.ysh.studio.crawler.httpclient;import org.apache.http.client.HttpClient;import org.apache.http.client.ResponseHandler;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.BasicResponseHandler;import org.apache.http.impl.client.DefaultHttpClient;/**
* 基于HtmlClient抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHttpClientTest{publicstaticvoid main(String[] args)throwsException{//目标页面String url ="http://www.yshjava.cn";//创建一个默认的HttpClientHttpClient httpclient =newDefaultHttpClient();try{//以get方式请求网页http://www.yshjava.cnHttpGet httpget =newHttpGet(url);//打印请求地址System.out.println("executing request "+ httpget.getURI());//创建响应处理器处理服务器响应内容ResponseHandlerresponseHandler=newBasicResponseHandler();//执行请求并获取结果String responseBody = httpclient.execute(httpget, responseHandler);System.out.println("----------------------------------------");System.out.println(responseBody);System.out.println("----------------------------------------");}finally{//关闭连接管理器
httpclient.getConnectionManager().shutdown();}}}
  汤
  jsoup 是一个 Java HTML 解析器,可以直接解析 URL 地址和 HTML 文本内容。它提供了一个非常省力的API,可以通过DOM、CSS和类似jQuery的操作方法来检索和操作数据。
  网页获取和分析速度非常快,推荐使用。
  主要功能如下:
  1. 从 URL、文件或字符串解析 HTML;
  2. 使用 DOM 或 CSS 选择器来查找和检索数据;
  3. 可操作的 HTML 元素、属性和文本;
  示例代码如下:
  package cn.ysh.studio.crawler.jsoup;import java.io.IOException;import org.jsoup.Jsoup;/**
* 基于Jsoup抓取网页内容
* @author www.yshjava.cn
*/publicclassJsoupTest{publicstaticvoid main(String[] args)throwsIOException{//目标页面String url ="http://www.yshjava.cn";//使用Jsoup连接目标页面,并执行请求,获取服务器响应内容String html =Jsoup.connect(url).execute().body();//打印页面内容System.out.println(html);}}
  单位
  htmlunit 是一个开源的java 页面分析工具。阅读完页面后,您可以有效地使用 htmlunit 来分析页面上的内容。该项目可以模拟浏览器操作,被称为java浏览器的开源实现。这个没有界面的浏览器也非常快。使用 Rhinojs 引擎。模拟js操作。
  网页获取和解析速度更快,性能更好。推荐用于需要解析网页脚本的应用场景。
  示例代码如下:
  package cn.ysh.studio.crawler.htmlunit;import com.gargoylesoftware.htmlunit.BrowserVersion;import com.gargoylesoftware.htmlunit.Page;import com.gargoylesoftware.htmlunit.WebClient;/**
* 基于HtmlUnit抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHtmlUnitSpider{publicstaticvoid main(String[] s)throwsException{//目标网页String url ="http://www.yshjava.cn";//模拟特定浏览器FIREFOX_3WebClient spider =newWebClient(BrowserVersion.FIREFOX_3);//获取目标网页Page page = spider.getPage(url);//打印网页内容System.out.println(page.getWebResponse().getContentAsString());//关闭所有窗口
spider.closeAllWindows();}}
  瓦蒂
  Watij(读作 wattage)是一种使用 Java 开发的 Web 应用程序测试工具。鉴于 Watij 的简单性和 Java 语言的强大功能,Watij 可以让您在真实浏览器中完成 Web 应用程序的自动化测试。因为调用了本地浏览器,所以支持CSS渲染和JS执行。
  网页抓取速度一般,IE版本过低(6/7)可能导致内存泄漏。
  示例代码如下:
  package cn.ysh.studio.crawler.ie;import watij.runtime.ie.IE;/**
* 基于Watij抓取网页内容,仅限Windows平台
*
* @author www.yshjava.cn
*/publicclassWatijTest{publicstaticvoid main(String[] s){//目标页面String url ="http://www.yshjava.cn";//实例化IE浏览器对象
IE ie =new IE();try{//启动浏览器
ie.start();//转到目标网页
ie.goTo(url);//等待网页加载就绪
ie.waitUntilReady();//打印页面内容System.out.println(ie.html());}catch(Exception e){
e.printStackTrace();}finally{try{//关闭IE浏览器
ie.close();}catch(Exception e){}}}}
  硒
  Selenium 也是 Web 应用程序测试的工具。Selenium 测试直接在浏览器中运行,就像真正的用户在操作一样。支持的浏览器包括 IE、Mozilla Firefox、Mozilla Suite 等。该工具的主要功能包括: 测试浏览器兼容性——测试您的应用程序是否可以在不同浏览器和操作系统上正常运行。测试系统功能——创建回归测试以验证软件功能和用户需求。支持自动录制动作和自动生成。测试Net、Java、Perl等不同语言的脚本。Selenium是ThoughtWorks专门为web应用编写的验收测试工具。
  网页抓取速度较慢,对于爬虫来说不是一个好的选择。
  示例代码如下:
  package cn.ysh.studio.crawler.selenium;import org.openqa.selenium.htmlunit.HtmlUnitDriver;/**
* 基于HtmlDriver抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHtmlDriverTest{publicstaticvoid main(String[] s){//目标网页String url ="http://www.yshjava.cn";HtmlUnitDriver driver =newHtmlUnitDriver();try{//禁用JS脚本功能
driver.setJavascriptEnabled(false);//打开目标网页
driver.get(url);//获取当前网页源码String html = driver.getPageSource();//打印网页源码System.out.println(html);}catch(Exception e){//打印堆栈信息
e.printStackTrace();}finally{try{//关闭并退出
driver.close();
driver.quit();}catch(Exception e){}}}}
  网络规范
  具有支持脚本执行和 CSS 渲染的接口的开源 Java 浏览器。速度是平均的。
  示例代码如下:
  package cn.ysh.studio.crawler.webspec;import org.watij.webspec.dsl.WebSpec;/**
* 基于WebSpec抓取网页内容
*
* @author www.yshjava.cn
*/publicclassWebspecTest{publicstaticvoid main(String[] s){//目标网页String url ="http://www.yshjava.cn";//实例化浏览器对象WebSpec spec =newWebSpec().mozilla();//隐藏浏览器窗体
spec.hide();//打开目标页面
spec.open(url);//打印网页源码System.out.println(spec.source());//关闭所有窗口
spec.closeAll();}} 查看全部

  浏览器抓取网页(网页获取和解析速度和性能的应用场景详解!
)
  (4)支持代理服务器
  (5) 支持自动cookies管理等。
  Java爬虫开发中应用最广泛的网页获取技术之一。它具有一流的速度和性能。它在功能支持方面相对较低。不支持JS脚本执行、CSS解析、渲染等准浏览器功能。推荐给需要快速获取网页的用户。无需解析脚本和 CSS 场景。
  示例代码如下:
  package cn.ysh.studio.crawler.httpclient;import org.apache.http.client.HttpClient;import org.apache.http.client.ResponseHandler;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.BasicResponseHandler;import org.apache.http.impl.client.DefaultHttpClient;/**
* 基于HtmlClient抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHttpClientTest{publicstaticvoid main(String[] args)throwsException{//目标页面String url ="http://www.yshjava.cn";//创建一个默认的HttpClientHttpClient httpclient =newDefaultHttpClient();try{//以get方式请求网页http://www.yshjava.cnHttpGet httpget =newHttpGet(url);//打印请求地址System.out.println("executing request "+ httpget.getURI());//创建响应处理器处理服务器响应内容ResponseHandlerresponseHandler=newBasicResponseHandler();//执行请求并获取结果String responseBody = httpclient.execute(httpget, responseHandler);System.out.println("----------------------------------------");System.out.println(responseBody);System.out.println("----------------------------------------");}finally{//关闭连接管理器
httpclient.getConnectionManager().shutdown();}}}
  汤
  jsoup 是一个 Java HTML 解析器,可以直接解析 URL 地址和 HTML 文本内容。它提供了一个非常省力的API,可以通过DOM、CSS和类似jQuery的操作方法来检索和操作数据。
  网页获取和分析速度非常快,推荐使用。
  主要功能如下:
  1. 从 URL、文件或字符串解析 HTML;
  2. 使用 DOM 或 CSS 选择器来查找和检索数据;
  3. 可操作的 HTML 元素、属性和文本;
  示例代码如下:
  package cn.ysh.studio.crawler.jsoup;import java.io.IOException;import org.jsoup.Jsoup;/**
* 基于Jsoup抓取网页内容
* @author www.yshjava.cn
*/publicclassJsoupTest{publicstaticvoid main(String[] args)throwsIOException{//目标页面String url ="http://www.yshjava.cn";//使用Jsoup连接目标页面,并执行请求,获取服务器响应内容String html =Jsoup.connect(url).execute().body();//打印页面内容System.out.println(html);}}
  单位
  htmlunit 是一个开源的java 页面分析工具。阅读完页面后,您可以有效地使用 htmlunit 来分析页面上的内容。该项目可以模拟浏览器操作,被称为java浏览器的开源实现。这个没有界面的浏览器也非常快。使用 Rhinojs 引擎。模拟js操作。
  网页获取和解析速度更快,性能更好。推荐用于需要解析网页脚本的应用场景。
  示例代码如下:
  package cn.ysh.studio.crawler.htmlunit;import com.gargoylesoftware.htmlunit.BrowserVersion;import com.gargoylesoftware.htmlunit.Page;import com.gargoylesoftware.htmlunit.WebClient;/**
* 基于HtmlUnit抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHtmlUnitSpider{publicstaticvoid main(String[] s)throwsException{//目标网页String url ="http://www.yshjava.cn";//模拟特定浏览器FIREFOX_3WebClient spider =newWebClient(BrowserVersion.FIREFOX_3);//获取目标网页Page page = spider.getPage(url);//打印网页内容System.out.println(page.getWebResponse().getContentAsString());//关闭所有窗口
spider.closeAllWindows();}}
  瓦蒂
  Watij(读作 wattage)是一种使用 Java 开发的 Web 应用程序测试工具。鉴于 Watij 的简单性和 Java 语言的强大功能,Watij 可以让您在真实浏览器中完成 Web 应用程序的自动化测试。因为调用了本地浏览器,所以支持CSS渲染和JS执行。
  网页抓取速度一般,IE版本过低(6/7)可能导致内存泄漏。
  示例代码如下:
  package cn.ysh.studio.crawler.ie;import watij.runtime.ie.IE;/**
* 基于Watij抓取网页内容,仅限Windows平台
*
* @author www.yshjava.cn
*/publicclassWatijTest{publicstaticvoid main(String[] s){//目标页面String url ="http://www.yshjava.cn";//实例化IE浏览器对象
IE ie =new IE();try{//启动浏览器
ie.start();//转到目标网页
ie.goTo(url);//等待网页加载就绪
ie.waitUntilReady();//打印页面内容System.out.println(ie.html());}catch(Exception e){
e.printStackTrace();}finally{try{//关闭IE浏览器
ie.close();}catch(Exception e){}}}}
  硒
  Selenium 也是 Web 应用程序测试的工具。Selenium 测试直接在浏览器中运行,就像真正的用户在操作一样。支持的浏览器包括 IE、Mozilla Firefox、Mozilla Suite 等。该工具的主要功能包括: 测试浏览器兼容性——测试您的应用程序是否可以在不同浏览器和操作系统上正常运行。测试系统功能——创建回归测试以验证软件功能和用户需求。支持自动录制动作和自动生成。测试Net、Java、Perl等不同语言的脚本。Selenium是ThoughtWorks专门为web应用编写的验收测试工具。
  网页抓取速度较慢,对于爬虫来说不是一个好的选择。
  示例代码如下:
  package cn.ysh.studio.crawler.selenium;import org.openqa.selenium.htmlunit.HtmlUnitDriver;/**
* 基于HtmlDriver抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHtmlDriverTest{publicstaticvoid main(String[] s){//目标网页String url ="http://www.yshjava.cn";HtmlUnitDriver driver =newHtmlUnitDriver();try{//禁用JS脚本功能
driver.setJavascriptEnabled(false);//打开目标网页
driver.get(url);//获取当前网页源码String html = driver.getPageSource();//打印网页源码System.out.println(html);}catch(Exception e){//打印堆栈信息
e.printStackTrace();}finally{try{//关闭并退出
driver.close();
driver.quit();}catch(Exception e){}}}}
  网络规范
  具有支持脚本执行和 CSS 渲染的接口的开源 Java 浏览器。速度是平均的。
  示例代码如下:
  package cn.ysh.studio.crawler.webspec;import org.watij.webspec.dsl.WebSpec;/**
* 基于WebSpec抓取网页内容
*
* @author www.yshjava.cn
*/publicclassWebspecTest{publicstaticvoid main(String[] s){//目标网页String url ="http://www.yshjava.cn";//实例化浏览器对象WebSpec spec =newWebSpec().mozilla();//隐藏浏览器窗体
spec.hide();//打开目标页面
spec.open(url);//打印网页源码System.out.println(spec.source());//关闭所有窗口
spec.closeAll();}}

浏览器抓取网页(新浪微博中模拟抓取网页内容采集网页的内容说明(图))

网站优化优采云 发表了文章 • 0 个评论 • 190 次浏览 • 2021-10-19 11:13 • 来自相关话题

  浏览器抓取网页(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
  运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:明星用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1. txtMegry_Result_Best.py 这个文件用户整理了某天的用户微博信息,比如抓取2018年4月23日的客户端信息,但是评论是动态加载的,还在研究中 weibo_spider&lt; 查看全部

  浏览器抓取网页(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
  运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:明星用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1. txtMegry_Result_Best.py 这个文件用户整理了某天的用户微博信息,比如抓取2018年4月23日的客户端信息,但是评论是动态加载的,还在研究中 weibo_spider&lt;

浏览器抓取网页(浏览器会检查缓存中有没有这个域名对应的DNS解析结果)

网站优化优采云 发表了文章 • 0 个评论 • 86 次浏览 • 2021-10-19 10:16 • 来自相关话题

  浏览器抓取网页(浏览器会检查缓存中有没有这个域名对应的DNS解析结果)
  • 第一步,浏览器会检查缓存中是否有域名对应的解析IP地址。如果有,决议结束。浏览器中的缓存是有时间和空间限制的。 • 检查操作系统缓存中是否有与该域名对应的DNS 解析结果。在Windows系统中,域名可以通过C:\Windows\System32\drivers\etc\hosts文件解析为任意可访问的IP地址,浏览器会先使用这个地址。 Linux 中的配置文件是/etc/named.conf。缓存时间还受到域名过期时间和缓存空间大小的限制。 • 如果上述解析不完整,操作系统会将域名发送到LDNS(Local DNS Server),即区域内的域名服务器。至此,80%的请求都可以得到解决。 • 如果 LDNS 尚不可用,请直接到根服务器域名服务器请求解析。 • 根域名服务器将查询到的主域名服务器(gTDL 服务器)地址返回给本地域名服务器。 gTDL是.com、.cn等国际顶级域名服务器。 • 本地域名服务器然后向主域名服务器发送请求。 • 接受请求的主域名服务器查找并返回该域名对应的Name Server 域名服务器地址,即注册的域名服务器,例如域名提供商的服务器。 • Name Server查询存储的域名和IP映射关系表,获取IP和TTL值(TTL值控制返回时间) 查看全部

  浏览器抓取网页(浏览器会检查缓存中有没有这个域名对应的DNS解析结果)
  • 第一步,浏览器会检查缓存中是否有域名对应的解析IP地址。如果有,决议结束。浏览器中的缓存是有时间和空间限制的。 • 检查操作系统缓存中是否有与该域名对应的DNS 解析结果。在Windows系统中,域名可以通过C:\Windows\System32\drivers\etc\hosts文件解析为任意可访问的IP地址,浏览器会先使用这个地址。 Linux 中的配置文件是/etc/named.conf。缓存时间还受到域名过期时间和缓存空间大小的限制。 • 如果上述解析不完整,操作系统会将域名发送到LDNS(Local DNS Server),即区域内的域名服务器。至此,80%的请求都可以得到解决。 • 如果 LDNS 尚不可用,请直接到根服务器域名服务器请求解析。 • 根域名服务器将查询到的主域名服务器(gTDL 服务器)地址返回给本地域名服务器。 gTDL是.com、.cn等国际顶级域名服务器。 • 本地域名服务器然后向主域名服务器发送请求。 • 接受请求的主域名服务器查找并返回该域名对应的Name Server 域名服务器地址,即注册的域名服务器,例如域名提供商的服务器。 • Name Server查询存储的域名和IP映射关系表,获取IP和TTL值(TTL值控制返回时间)

浏览器抓取网页(浏览器抓取网页中的图片的工具:bigjpg2.js)

网站优化优采云 发表了文章 • 0 个评论 • 129 次浏览 • 2021-10-19 06:01 • 来自相关话题

  浏览器抓取网页(浏览器抓取网页中的图片的工具:bigjpg2.js)
  浏览器抓取网页中的图片的工具:bigjpg2.js//扩展包bigjpg2.js提供了多种图片抓取工具,用于给爬虫采集的图片一些定制化的规则,爬虫程序在输入网页网址和图片名称后可以获取每一张图片的大小、尺寸、分辨率等。varjpg=document.createelement('svg');jpg.appendchild("class");parsejson有些浏览器自带parsejson的插件,用户只需要在浏览器浏览任意网页,再通过parsejson工具生成请求链接,同时前端也可以在mock服务器中生成post数据即可,同时生成的response中可以包含jpg图片。
  fullstream如果你不想要一个jpg或者.jpg文件,也可以用fullstream来合并网页中的所有图片。fullstream可以将任意图片实例插入,例如jpg/.jpg。easyprintxmlxmlhttprequest.open(url,jsonurl)xmlhttprequest.get(url,jsonurl)xmlhttprequest.post(url,jsonurl)xmlhttprequest.put(url,jsonurl)xmlhttprequest.delete(url,jsonurl)xmlhttprequest.open_format(jsonurl,xmlurl)其中,jsonurl可以是任意网页地址,xmlurl可以是任意格式,如jpg图片,.jpg图片等等。
  xmlhttprequest=easyprint.extract("")xmlhttprequest=easyprint.extract("all/bigjpg2.jpg")xmlhttprequest=easyprint.extract("eagle.jpg")xmlhttprequest=easyprint.extract("jpeg.jpg")xmlhttprequest=easyprint.extract("gif.jpg")xmlhttprequest=easyprint.extract("cam.jpg")xmlhttprequest=easyprint.extract("img_3.jpg")xmlhttprequest=easyprint.extract("img_4.jpg")xmlhttprequest=easyprint.extract("img_5.jpg")xmlhttprequest=easyprint.extract("jpg_6.jpg")xmlhttprequest=easyprint.extract("cad.jpg")xmlhttprequest=easyprint.extract("cam3.jpg")xmlhttprequest=easyprint.extract("img_7.jpg")xmlhttprequest=easyprint.extract("img_8.jpg")xmlhttprequest=easyprint.extract("cad5.jpg")xmlhttprequest=easyprint.extract("cad7.jpg")xmlhttprequest=easyprint.extract("img_9.jpg")xmlhttprequest=easyprint.extract("jpg_jpg")xmlhttprequest=easyprint.extract("jpg.jpg")xmlhttprequest=easyprint.e。 查看全部

  浏览器抓取网页(浏览器抓取网页中的图片的工具:bigjpg2.js)
  浏览器抓取网页中的图片的工具:bigjpg2.js//扩展包bigjpg2.js提供了多种图片抓取工具,用于给爬虫采集的图片一些定制化的规则,爬虫程序在输入网页网址和图片名称后可以获取每一张图片的大小、尺寸、分辨率等。varjpg=document.createelement('svg');jpg.appendchild("class");parsejson有些浏览器自带parsejson的插件,用户只需要在浏览器浏览任意网页,再通过parsejson工具生成请求链接,同时前端也可以在mock服务器中生成post数据即可,同时生成的response中可以包含jpg图片。
  fullstream如果你不想要一个jpg或者.jpg文件,也可以用fullstream来合并网页中的所有图片。fullstream可以将任意图片实例插入,例如jpg/.jpg。easyprintxmlxmlhttprequest.open(url,jsonurl)xmlhttprequest.get(url,jsonurl)xmlhttprequest.post(url,jsonurl)xmlhttprequest.put(url,jsonurl)xmlhttprequest.delete(url,jsonurl)xmlhttprequest.open_format(jsonurl,xmlurl)其中,jsonurl可以是任意网页地址,xmlurl可以是任意格式,如jpg图片,.jpg图片等等。
  xmlhttprequest=easyprint.extract("")xmlhttprequest=easyprint.extract("all/bigjpg2.jpg")xmlhttprequest=easyprint.extract("eagle.jpg")xmlhttprequest=easyprint.extract("jpeg.jpg")xmlhttprequest=easyprint.extract("gif.jpg")xmlhttprequest=easyprint.extract("cam.jpg")xmlhttprequest=easyprint.extract("img_3.jpg")xmlhttprequest=easyprint.extract("img_4.jpg")xmlhttprequest=easyprint.extract("img_5.jpg")xmlhttprequest=easyprint.extract("jpg_6.jpg")xmlhttprequest=easyprint.extract("cad.jpg")xmlhttprequest=easyprint.extract("cam3.jpg")xmlhttprequest=easyprint.extract("img_7.jpg")xmlhttprequest=easyprint.extract("img_8.jpg")xmlhttprequest=easyprint.extract("cad5.jpg")xmlhttprequest=easyprint.extract("cad7.jpg")xmlhttprequest=easyprint.extract("img_9.jpg")xmlhttprequest=easyprint.extract("jpg_jpg")xmlhttprequest=easyprint.extract("jpg.jpg")xmlhttprequest=easyprint.e。

浏览器抓取网页(如何在优采云采集器里面登录网页?到的抓取工具)

网站优化优采云 发表了文章 • 0 个评论 • 133 次浏览 • 2021-10-17 14:04 • 来自相关话题

  浏览器抓取网页(如何在优采云采集器里面登录网页?到的抓取工具)
  登录网页数据抓取采集 在网页数据抓取过程中,我们会发现有些网页需要权限才能查看全部内容。这种网站必须登录才能看到内容。比如论坛采集的内容,或者采集的招聘信息中的电话号码等等,大家应该都遇到过这种情况,所以需要登录采集@网页数据被捕获。&gt; 下面就这个问题和大家分享一下我的经验——如何实现登录采集功能。使用的爬虫工具是最常用的优采云采集器 V9,它的实现原理是:我们只需要登录账号手动查看权限,然后优采云采集器也是一样,只要让采集器登录就可以看到这个网站 隐藏信息。优采云采集器如何登录网页?优采云采集器使用内置浏览器登录采集,数据发布有时需要登录,除了浏览器登录,还有另外一种登录方式,在此说明。 采集登录:第一步是找到登录界面。第二步,按照下图的说明登录你要采集的网站,使用浏览器获取网页登录信息。这里,Cookie是指用户的登录信息,Useragent是客户端或浏览器的标识。通过以上2步,优采云采集器已经成功登录网站,效果如上图所示。操作还是比较简单的,大家可以通过这个操作轻松完成登录采集!需要注意的是,这里只能处理登录时可见的内容,没有办法处理只有回复时才可见的内容。 查看全部

  浏览器抓取网页(如何在优采云采集器里面登录网页?到的抓取工具)
  登录网页数据抓取采集 在网页数据抓取过程中,我们会发现有些网页需要权限才能查看全部内容。这种网站必须登录才能看到内容。比如论坛采集的内容,或者采集的招聘信息中的电话号码等等,大家应该都遇到过这种情况,所以需要登录采集@网页数据被捕获。&gt; 下面就这个问题和大家分享一下我的经验——如何实现登录采集功能。使用的爬虫工具是最常用的优采云采集器 V9,它的实现原理是:我们只需要登录账号手动查看权限,然后优采云采集器也是一样,只要让采集器登录就可以看到这个网站 隐藏信息。优采云采集器如何登录网页?优采云采集器使用内置浏览器登录采集,数据发布有时需要登录,除了浏览器登录,还有另外一种登录方式,在此说明。 采集登录:第一步是找到登录界面。第二步,按照下图的说明登录你要采集的网站,使用浏览器获取网页登录信息。这里,Cookie是指用户的登录信息,Useragent是客户端或浏览器的标识。通过以上2步,优采云采集器已经成功登录网站,效果如上图所示。操作还是比较简单的,大家可以通过这个操作轻松完成登录采集!需要注意的是,这里只能处理登录时可见的内容,没有办法处理只有回复时才可见的内容。

浏览器抓取网页(,浏览器,页面,句柄,内容指针指针站长站)

网站优化优采云 发表了文章 • 0 个评论 • 80 次浏览 • 2021-11-01 23:00 • 来自相关话题

  浏览器抓取网页(,浏览器,页面,句柄,内容指针指针站长站)
  c#从IE浏览器获取当前页面内容、浏览器、页面、句柄、内容、指针
  c#从IE浏览器获取当前页面的内容
  轻松采集站长网站,站长之家整理c#从IE浏览器获取当前页面的相关内容。
  
private void timer1_Tick(object sender, EventArgs e)
{
lock (currentLock)
{
System.Drawing.Point MousePoint = System.Windows.Forms.Form.MousePosition;
if (_leftClick)
{
timer1.Stop();
_leftClick = false;
_lastDocument = GetHTMLDocumentFormHwnd(GetPointControl(MousePoint, false));
if (_lastDocument != null)
{
if (_getDocument)
{
_getDocument = true;
try
{
string url = _lastDocument.url;
string html = _lastDocument.documentElement.outerHTML;
string cookie = _lastDocument.cookie;
string domain = _lastDocument.domain;
var resolveParams = new ResolveParam
{
Url = new Uri(url),
Html = html,
PageCookie = cookie,
Domain = domain
};
RequetResove(resolveParams);
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
}
}
else
{
new MessageTip().Show("xx", "当前页面不是IE浏览器页面,或使用了非IE内核浏览器,如火狐,搜狗等。请使用IE浏览器打开网页");
}
_getDocument = false;
}
else
{
_pointFrm.Left = MousePoint.X + 10;
_pointFrm.Top = MousePoint.Y + 10;
}
}
}
  第 11 行的 GetHTMLDocumentFormHwnd(GetPointControl(MousePoint, false)) 分解首先从鼠标坐标获取页面的句柄:
  
public static IntPtr GetPointControl(System.Drawing.Point p, bool allControl)
{
IntPtr handle = Win32APIsFull.WindowFromPoint(p);
if (handle != IntPtr.Zero)
{
System.Drawing.Rectangle rect = default(System.Drawing.Rectangle);
if (Win32APIsFull.GetWindowRect(handle, out rect))
{
return Win32APIsFull.ChildWindowFromPointEx(handle, new System.Drawing.Point(p.X - rect.X, p.Y - rect.Y), allControl ? Win32APIsFull.CWP.ALL : Win32APIsFull.CWP.SKIPINVISIBLE);
}
}
return IntPtr.Zero;
}
  接下来,根据句柄获取页面内容:
  
public static HTMLDocument GetHTMLDocumentFormHwnd(IntPtr hwnd)
{
IntPtr result = Marshal.AllocHGlobal(4);
Object obj = null;
Console.WriteLine(Win32APIsFull.SendMessageTimeoutA(hwnd, HTML_GETOBJECT_mid, 0, 0, 2, 1000, result));
if (Marshal.ReadInt32(result) != 0)
{
Console.WriteLine(Win32APIsFull.ObjectFromLresult(Marshal.ReadInt32(result), ref IID_IHTMLDocument, 0, out obj));
}
Marshal.FreeHGlobal(result);
return obj as HTMLDocument;
}
  一般原则:
  
  向IE表单发送消息,获取指向IE浏览器(非托管)的某个内存块的指针,然后根据该指针获取HTMLDocument对象。
  这个方法涉及到win32的两个功能:
  
[System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "SendMessageTimeoutA")]
public static extern int SendMessageTimeoutA(
[InAttribute()] System.IntPtr hWnd,
uint Msg, uint wParam, int lParam,
uint fuFlags,
uint uTimeout,
System.IntPtr lpdwResult);
  
[System.Runtime.InteropServices.DllImportAttribute("oleacc.dll", EntryPoint = "ObjectFromLresult")]
public static extern int ObjectFromLresult(
int lResult,
ref Guid riid,
int wParam,
[MarshalAs(UnmanagedType.IDispatch), Out]
out Object pObject
);
  以上是c#从IE浏览器获取当前页面内容的详细内容。更多关于c#获取浏览器页面内容的信息,请关注eCai站长网站其他相关文章!
  以上是c#从IE浏览器获取当前页面内容的详细介绍。欢迎大家对c#提出宝贵意见,从IE浏览器获取当前页面的内容 查看全部

  浏览器抓取网页(,浏览器,页面,句柄,内容指针指针站长站)
  c#从IE浏览器获取当前页面内容、浏览器、页面、句柄、内容、指针
  c#从IE浏览器获取当前页面的内容
  轻松采集站长网站,站长之家整理c#从IE浏览器获取当前页面的相关内容。
  
private void timer1_Tick(object sender, EventArgs e)
{
lock (currentLock)
{
System.Drawing.Point MousePoint = System.Windows.Forms.Form.MousePosition;
if (_leftClick)
{
timer1.Stop();
_leftClick = false;
_lastDocument = GetHTMLDocumentFormHwnd(GetPointControl(MousePoint, false));
if (_lastDocument != null)
{
if (_getDocument)
{
_getDocument = true;
try
{
string url = _lastDocument.url;
string html = _lastDocument.documentElement.outerHTML;
string cookie = _lastDocument.cookie;
string domain = _lastDocument.domain;
var resolveParams = new ResolveParam
{
Url = new Uri(url),
Html = html,
PageCookie = cookie,
Domain = domain
};
RequetResove(resolveParams);
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message);
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
}
}
else
{
new MessageTip().Show("xx", "当前页面不是IE浏览器页面,或使用了非IE内核浏览器,如火狐,搜狗等。请使用IE浏览器打开网页");
}
_getDocument = false;
}
else
{
_pointFrm.Left = MousePoint.X + 10;
_pointFrm.Top = MousePoint.Y + 10;
}
}
}
  第 11 行的 GetHTMLDocumentFormHwnd(GetPointControl(MousePoint, false)) 分解首先从鼠标坐标获取页面的句柄:
  
public static IntPtr GetPointControl(System.Drawing.Point p, bool allControl)
{
IntPtr handle = Win32APIsFull.WindowFromPoint(p);
if (handle != IntPtr.Zero)
{
System.Drawing.Rectangle rect = default(System.Drawing.Rectangle);
if (Win32APIsFull.GetWindowRect(handle, out rect))
{
return Win32APIsFull.ChildWindowFromPointEx(handle, new System.Drawing.Point(p.X - rect.X, p.Y - rect.Y), allControl ? Win32APIsFull.CWP.ALL : Win32APIsFull.CWP.SKIPINVISIBLE);
}
}
return IntPtr.Zero;
}
  接下来,根据句柄获取页面内容:
  
public static HTMLDocument GetHTMLDocumentFormHwnd(IntPtr hwnd)
{
IntPtr result = Marshal.AllocHGlobal(4);
Object obj = null;
Console.WriteLine(Win32APIsFull.SendMessageTimeoutA(hwnd, HTML_GETOBJECT_mid, 0, 0, 2, 1000, result));
if (Marshal.ReadInt32(result) != 0)
{
Console.WriteLine(Win32APIsFull.ObjectFromLresult(Marshal.ReadInt32(result), ref IID_IHTMLDocument, 0, out obj));
}
Marshal.FreeHGlobal(result);
return obj as HTMLDocument;
}
  一般原则:
  
  向IE表单发送消息,获取指向IE浏览器(非托管)的某个内存块的指针,然后根据该指针获取HTMLDocument对象。
  这个方法涉及到win32的两个功能:
  
[System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "SendMessageTimeoutA")]
public static extern int SendMessageTimeoutA(
[InAttribute()] System.IntPtr hWnd,
uint Msg, uint wParam, int lParam,
uint fuFlags,
uint uTimeout,
System.IntPtr lpdwResult);
  
[System.Runtime.InteropServices.DllImportAttribute("oleacc.dll", EntryPoint = "ObjectFromLresult")]
public static extern int ObjectFromLresult(
int lResult,
ref Guid riid,
int wParam,
[MarshalAs(UnmanagedType.IDispatch), Out]
out Object pObject
);
  以上是c#从IE浏览器获取当前页面内容的详细内容。更多关于c#获取浏览器页面内容的信息,请关注eCai站长网站其他相关文章!
  以上是c#从IE浏览器获取当前页面内容的详细介绍。欢迎大家对c#提出宝贵意见,从IE浏览器获取当前页面的内容

浏览器抓取网页(有三种方法能够确定浏览器窗口的尺寸(浏览器的视口))

网站优化优采云 发表了文章 • 0 个评论 • 98 次浏览 • 2021-11-01 15:05 • 来自相关话题

  浏览器抓取网页(有三种方法能够确定浏览器窗口的尺寸(浏览器的视口))
  确定浏览器窗口(浏览器的视口,不包括工具栏和滚动条)大小的方法有三种。
  对于 Internet Explorer、Chrome、Firefox、Opera 和 Safari:
  当浏览器窗口缩小或放大时,1、2、5、6 的值会相应增加或减少;而 3、4 将保持不变。改变。
  使用e.clientX获取当前可视区域的横坐标;使用e.pageX获取整个页面当前元素的横坐标。
  注意:使用 element.getBoundingClientRect();获取元素的宽度、高度和位置信息
  使用 window.screen.height 和 window.screen.width 来获取计算机的分辨率。该值不会随着浏览器窗口而改变。
  实用的 JavaScript 解决方案(涵盖所有浏览器):
  示例
  var w=window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;
var h=window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;
  以上是通过js获取的屏幕高宽,也可以使用jQuery获取,如下:
  $(window).width()==window.innerWidth
  $(window).height()==window.innerHeight
  同时也可以使用jQuery获取DOM(文档对象模型)的高宽如下:
  $(document).width()
  $(document).height()
  父子窗口之间的调用可以看我的博客-《通过js或jQuery实现子窗口与父窗口之间元素、方法、窗口的相互获取》 查看全部

  浏览器抓取网页(有三种方法能够确定浏览器窗口的尺寸(浏览器的视口))
  确定浏览器窗口(浏览器的视口,不包括工具栏和滚动条)大小的方法有三种。
  对于 Internet Explorer、Chrome、Firefox、Opera 和 Safari:
  当浏览器窗口缩小或放大时,1、2、5、6 的值会相应增加或减少;而 3、4 将保持不变。改变。
  使用e.clientX获取当前可视区域的横坐标;使用e.pageX获取整个页面当前元素的横坐标。
  注意:使用 element.getBoundingClientRect();获取元素的宽度、高度和位置信息
  使用 window.screen.height 和 window.screen.width 来获取计算机的分辨率。该值不会随着浏览器窗口而改变。
  实用的 JavaScript 解决方案(涵盖所有浏览器):
  示例
  var w=window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth;
var h=window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight;
  以上是通过js获取的屏幕高宽,也可以使用jQuery获取,如下:
  $(window).width()==window.innerWidth
  $(window).height()==window.innerHeight
  同时也可以使用jQuery获取DOM(文档对象模型)的高宽如下:
  $(document).width()
  $(document).height()
  父子窗口之间的调用可以看我的博客-《通过js或jQuery实现子窗口与父窗口之间元素、方法、窗口的相互获取》

浏览器抓取网页(行动支援网页剪贴簿支援行动浏览器)

网站优化优采云 发表了文章 • 0 个评论 • 76 次浏览 • 2021-11-01 15:02 • 来自相关话题

  浏览器抓取网页(行动支援网页剪贴簿支援行动浏览器)
  介绍:
  WebScrapBook 可以忠实地检索网页内容,支持多种存储格式和自定义设置,可以对检索到的数据进行检索、组织、注释和编辑。此扩展程序继承自 ScrapBook X,后者是 Firefox 的传统附加组件。
  特征:
  1. 忠实抓取:浏览器显示的网页可以抓取存储,不丢失细节。一些重要的元数据,如来源网址和检索时间也如实记录。
  2. 自定义抓取:网页剪贴簿可以抓取选定范围的网页,抓取网页的原创外观(无需页面脚本处理),或者抓取网页作为书签。您还可以自定义如何处理网页中的图片、音频、视频、字体、框架页、样式表、脚本等资源。网页可以保存为文件夹、ZIP 存档文件(HTZ 或 MAFF)或单个 HTML 文件。
  3. 管理数据:您可以在浏览器的侧边栏中使用一个或多个剪贴簿,将检索到的网页以分层树状结构进行组织。每个剪贴簿都可以单独索引以供将来以各种方式搜索(可以组合全文关键词、标题、自定义评论、源 URL 和其他元信息搜索)。(*)
  4. 编辑网页:可以在抓取前后对网页进行标记、注释或编辑。您还可以创建和管理 HTML 或 Markdown 格式的笔记页面。(*)
  5. 远程访问:可以设置后端服务器来托管从其他机器读取或编辑的检索数据。您还可以为剪贴板创建静态索引,以便发布到不支持动态网页的服务器。(*)
  6. 手机支持:网页剪贴簿支持手机浏览器,如Android版火狐和Kiwi Browser,可以在手机或平板电脑上抓取和编辑网页。
  7. 传统ScrapBook 支持:可以将传统ScrapBook 或ScrapBook X 创建的剪贴簿转换为网络剪贴簿兼容格式。(*)
  * 星号项的全部或部分功能需要与后端服务器配合使用。可以使用 PyWebScrapBook 设置后端服务器。
  * HTZ 或MAFF 存档文件可以使用内置的存档网页查看器查看,使用PyWebScrapBook 或其他辅助工具打开,或解压打开门户页面进行查看。
  看:
  * 下载并安装 PyWebScrapBook:
  * 进一步的解释和常见问题请参考这个总数:(zh_TW)
  * 为了便于编译和更完整的双向讨论,如有问题请尽量向仓库反馈:
  * 如果此工具对您有帮助,您可以捐款以支持我们:
  版本:0.98.1 用户评分:0(满分 5 分) 此版本的下载量:17157
  大小:409KiB 本版本最后更新时间:2021 年 2 月 12 日 查看全部

  浏览器抓取网页(行动支援网页剪贴簿支援行动浏览器)
  介绍:
  WebScrapBook 可以忠实地检索网页内容,支持多种存储格式和自定义设置,可以对检索到的数据进行检索、组织、注释和编辑。此扩展程序继承自 ScrapBook X,后者是 Firefox 的传统附加组件。
  特征:
  1. 忠实抓取:浏览器显示的网页可以抓取存储,不丢失细节。一些重要的元数据,如来源网址和检索时间也如实记录。
  2. 自定义抓取:网页剪贴簿可以抓取选定范围的网页,抓取网页的原创外观(无需页面脚本处理),或者抓取网页作为书签。您还可以自定义如何处理网页中的图片、音频、视频、字体、框架页、样式表、脚本等资源。网页可以保存为文件夹、ZIP 存档文件(HTZ 或 MAFF)或单个 HTML 文件。
  3. 管理数据:您可以在浏览器的侧边栏中使用一个或多个剪贴簿,将检索到的网页以分层树状结构进行组织。每个剪贴簿都可以单独索引以供将来以各种方式搜索(可以组合全文关键词、标题、自定义评论、源 URL 和其他元信息搜索)。(*)
  4. 编辑网页:可以在抓取前后对网页进行标记、注释或编辑。您还可以创建和管理 HTML 或 Markdown 格式的笔记页面。(*)
  5. 远程访问:可以设置后端服务器来托管从其他机器读取或编辑的检索数据。您还可以为剪贴板创建静态索引,以便发布到不支持动态网页的服务器。(*)
  6. 手机支持:网页剪贴簿支持手机浏览器,如Android版火狐和Kiwi Browser,可以在手机或平板电脑上抓取和编辑网页。
  7. 传统ScrapBook 支持:可以将传统ScrapBook 或ScrapBook X 创建的剪贴簿转换为网络剪贴簿兼容格式。(*)
  * 星号项的全部或部分功能需要与后端服务器配合使用。可以使用 PyWebScrapBook 设置后端服务器。
  * HTZ 或MAFF 存档文件可以使用内置的存档网页查看器查看,使用PyWebScrapBook 或其他辅助工具打开,或解压打开门户页面进行查看。
  看:
  * 下载并安装 PyWebScrapBook:
  * 进一步的解释和常见问题请参考这个总数:(zh_TW)
  * 为了便于编译和更完整的双向讨论,如有问题请尽量向仓库反馈:
  * 如果此工具对您有帮助,您可以捐款以支持我们:
  版本:0.98.1 用户评分:0(满分 5 分) 此版本的下载量:17157
  大小:409KiB 本版本最后更新时间:2021 年 2 月 12 日

浏览器抓取网页( 专注于互联网主流的各种技术简明现代魔法-gtgt)

网站优化优采云 发表了文章 • 0 个评论 • 184 次浏览 • 2021-10-31 05:16 • 来自相关话题

  浏览器抓取网页(
专注于互联网主流的各种技术简明现代魔法-gtgt)
  
  专注于互联网主流的各种技术
  简洁现代的魔法 -&gt; -&gt; JavaScript 获取浏览器窗口的大小
  JavaScript 获取浏览器窗口的大小
  2010-04-16
  程序演示:
  获取浏览器的当前窗口大小。当浏览器窗口的大小发生变化时,显示的值会随时发生变化。
  该程序主要使用了有关窗口的 Document 对象的一些属性。这些属性的主要功能和用法如下:
  获取窗口的大小,不同的浏览器需要使用不同的属性和方法:检测窗口的真实大小,需要使用Netscape下的Window属性;IE下,需要深入到Document里面去检测body;在DOM环境下,如果要获取窗口的大小,需要注意的是根元素的大小,而不是元素的大小。Window 对象的innerWidth 属性收录当前窗口的内部宽度。Window 对象的innerHeight 属性收录当前窗口的内部高度。Document 对象的 body 属性对应于 HTML 文档的标签。Document 对象的 documentElement 属性表示 HTML 文档的根节点。文档正文。clientHeight 表示 HTML 文档所在窗口的当前高度。文档正文。clientWidth 表示 HTML 文档所在窗口的当前宽度。JavaScript 代码
  
var winWidth = 0;
var winHeight = 0;
function findDimensions() //函数:获取尺寸
{
// 获取窗口宽度
if (window.innerWidth)
winWidth = window.innerWidth;
else if ((document.body) && (document.body.clientWidth))
winWidth = document.body.clientWidth;
// 获取窗口高度
if (window.innerHeight)
winHeight = window.innerHeight;
else if ((document.body) && (document.body.clientHeight))
winHeight = document.body.clientHeight;

// 通过深入Document内部对body进行检测,获取窗口大小
if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth)
{
winHeight = document.documentElement.clientHeight;
winWidth = document.documentElement.clientWidth;
}
// 结果输出至两个文本框
document.form1.availHeight.value= winHeight;
document.form1.availWidth.value= winWidth;
}
findDimensions(); // 调用函数,获取数值
window.onresize=findDimensions;
  方案实施步骤:
  程序首先创建一个收录两个文本框的窗体来显示当前窗口的宽度和高度,它的值会随着窗口的大小而变化。在后续的 JavaScript 代码中,首先定义了两个变量 winWidth 和 winHeight 来保存窗口的高度和宽度。然后,在函数 findDimensions() 中,使用 window.innerHeight 和 window.innerWidth 获取窗口的高度和宽度,并将两者保存在上述两个变量中。然后深入文档内部检测正文,获取窗口大小,并将其存储在上述两个变量中。在函数的最后,通过按名称访问表单元素,结果输出到两个文本框。在 JavaScript 代码的最后,整个操作都是通过调用 findDimensions() 函数来完成的。 查看全部

  浏览器抓取网页(
专注于互联网主流的各种技术简明现代魔法-gtgt)
  
  专注于互联网主流的各种技术
  简洁现代的魔法 -&gt; -&gt; JavaScript 获取浏览器窗口的大小
  JavaScript 获取浏览器窗口的大小
  2010-04-16
  程序演示:
  获取浏览器的当前窗口大小。当浏览器窗口的大小发生变化时,显示的值会随时发生变化。
  该程序主要使用了有关窗口的 Document 对象的一些属性。这些属性的主要功能和用法如下:
  获取窗口的大小,不同的浏览器需要使用不同的属性和方法:检测窗口的真实大小,需要使用Netscape下的Window属性;IE下,需要深入到Document里面去检测body;在DOM环境下,如果要获取窗口的大小,需要注意的是根元素的大小,而不是元素的大小。Window 对象的innerWidth 属性收录当前窗口的内部宽度。Window 对象的innerHeight 属性收录当前窗口的内部高度。Document 对象的 body 属性对应于 HTML 文档的标签。Document 对象的 documentElement 属性表示 HTML 文档的根节点。文档正文。clientHeight 表示 HTML 文档所在窗口的当前高度。文档正文。clientWidth 表示 HTML 文档所在窗口的当前宽度。JavaScript 代码
  
var winWidth = 0;
var winHeight = 0;
function findDimensions() //函数:获取尺寸
{
// 获取窗口宽度
if (window.innerWidth)
winWidth = window.innerWidth;
else if ((document.body) && (document.body.clientWidth))
winWidth = document.body.clientWidth;
// 获取窗口高度
if (window.innerHeight)
winHeight = window.innerHeight;
else if ((document.body) && (document.body.clientHeight))
winHeight = document.body.clientHeight;

// 通过深入Document内部对body进行检测,获取窗口大小
if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth)
{
winHeight = document.documentElement.clientHeight;
winWidth = document.documentElement.clientWidth;
}
// 结果输出至两个文本框
document.form1.availHeight.value= winHeight;
document.form1.availWidth.value= winWidth;
}
findDimensions(); // 调用函数,获取数值
window.onresize=findDimensions;
  方案实施步骤:
  程序首先创建一个收录两个文本框的窗体来显示当前窗口的宽度和高度,它的值会随着窗口的大小而变化。在后续的 JavaScript 代码中,首先定义了两个变量 winWidth 和 winHeight 来保存窗口的高度和宽度。然后,在函数 findDimensions() 中,使用 window.innerHeight 和 window.innerWidth 获取窗口的高度和宽度,并将两者保存在上述两个变量中。然后深入文档内部检测正文,获取窗口大小,并将其存储在上述两个变量中。在函数的最后,通过按名称访问表单元素,结果输出到两个文本框。在 JavaScript 代码的最后,整个操作都是通过调用 findDimensions() 函数来完成的。

浏览器抓取网页(浏览器抓取真实直播源地址(纯前端解析)() )

网站优化优采云 发表了文章 • 0 个评论 • 431 次浏览 • 2021-10-31 04:06 • 来自相关话题

  浏览器抓取网页(浏览器抓取真实直播源地址(纯前端解析)()
)
  浏览器抓取真实直播源地址(纯前端JS解析)
  网上搜索各种平台的直播源地址满天飞,但也经常有失败的时候,因为官方会定期升级系统修改各种参数或链接,使直播源不永久,所以我们的人民一直提倡教导他人。最好教人如何钓鱼。与其把直播源给别人,还不如教大家如何爬取直播源,哪怕失败了。
  
  0. 前言
  业余时间喜欢用虎牙看直播,所以第一时间想到的就是怎么抢虎牙的直播源。
  爬取之前需要了解一下直播视频源的分类和区别,可以自己了解hls、flv、m3u8等知识。
  Tips:本教程只教你如何使用前端调试技巧和基本的爬虫操作。它不用于商业用途。
  1. 浏览器爬取过程
  首先打开虎牙官网,找到直播间:这里是你使用的移动端的网页(因为移动端简单)
  我随手读了一遍。没有ajax请求,所以地址必须和页面一起带进来。现在直播的网页大多是SSR(服务端渲染),所以只能去页面源码中查找:
  好人!直接找了一个我很想寻址的liveLineUrl,就是m3u8的地址:
  
  在线m3u8播放测试网站:
  这个网站可以测试播放源是否好,加油!尝试一下!
  
  这是完美的!
  
  但有那么简单吗?
  
  我尝试了我经常看的直播间【Let's Watch】看电影什么的,结果:
  
  
  这就是正在发生的事情。. . 然后对比发现问题前后的两个链接,以下是【一起看】的链接:
  
  然后想到liveLineUrl参数不是全局变量,控制台打印出来看看,然后仔细对比发现参数变了,其中一个fm参数变成了seqid:
  
  先试试看控制台打印是否可以播放:
  
  OK,司马懿出来了,现在只需要分析破解参数了。
  2. 参数分析
  Ctrl + Shift + F 搜索liveLineUrl,然后在这里找到js处理url,打个断点调试看看如何处理:
  断点进入Object(m.default)(window.liveLineUrl),可以看到这里是处理参数的地方,最后返回的是解析后的参数字符串:
  
  我整理了一下解析函数,重新实现了:
  function parseUrl(url){
let params = url.split("?")[1];
params = params.split("&");
let paramsObj = {};
for (let i = 0; i {
y += `&${e}=${others[e]}`
});
return `${mainUrl}?wsSecret=${newWsSecret}&wsTime=${wsTime}&u=0&seqid=${time}${y}`;
}
  其中用到了Base64和MD5相关的函数:
<p>// md5下载:https://raw.githubusercontent. ... d5.js
let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f > 2;
o = (n & 3) 4;
u = (r & 15) 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f > 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n


虎牙直播



To view this video please enable JavaScript, and consider upgrading to a web browser that
supports HTML5 video






let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f > 2;
o = (n & 3) 4;
u = (r & 15) 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f > 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n 查看全部

  浏览器抓取网页(浏览器抓取真实直播源地址(纯前端解析)()
)
  浏览器抓取真实直播源地址(纯前端JS解析)
  网上搜索各种平台的直播源地址满天飞,但也经常有失败的时候,因为官方会定期升级系统修改各种参数或链接,使直播源不永久,所以我们的人民一直提倡教导他人。最好教人如何钓鱼。与其把直播源给别人,还不如教大家如何爬取直播源,哪怕失败了。
  
  0. 前言
  业余时间喜欢用虎牙看直播,所以第一时间想到的就是怎么抢虎牙的直播源。
  爬取之前需要了解一下直播视频源的分类和区别,可以自己了解hls、flv、m3u8等知识。
  Tips:本教程只教你如何使用前端调试技巧和基本的爬虫操作。它不用于商业用途。
  1. 浏览器爬取过程
  首先打开虎牙官网,找到直播间:这里是你使用的移动端的网页(因为移动端简单)
  我随手读了一遍。没有ajax请求,所以地址必须和页面一起带进来。现在直播的网页大多是SSR(服务端渲染),所以只能去页面源码中查找:
  好人!直接找了一个我很想寻址的liveLineUrl,就是m3u8的地址:
  
  在线m3u8播放测试网站:
  这个网站可以测试播放源是否好,加油!尝试一下!
  
  这是完美的!
  
  但有那么简单吗?
  
  我尝试了我经常看的直播间【Let's Watch】看电影什么的,结果:
  
  
  这就是正在发生的事情。. . 然后对比发现问题前后的两个链接,以下是【一起看】的链接:
  
  然后想到liveLineUrl参数不是全局变量,控制台打印出来看看,然后仔细对比发现参数变了,其中一个fm参数变成了seqid:
  
  先试试看控制台打印是否可以播放:
  
  OK,司马懿出来了,现在只需要分析破解参数了。
  2. 参数分析
  Ctrl + Shift + F 搜索liveLineUrl,然后在这里找到js处理url,打个断点调试看看如何处理:
  断点进入Object(m.default)(window.liveLineUrl),可以看到这里是处理参数的地方,最后返回的是解析后的参数字符串:
  
  我整理了一下解析函数,重新实现了:
  function parseUrl(url){
let params = url.split("?")[1];
params = params.split("&");
let paramsObj = {};
for (let i = 0; i {
y += `&${e}=${others[e]}`
});
return `${mainUrl}?wsSecret=${newWsSecret}&wsTime=${wsTime}&u=0&seqid=${time}${y}`;
}
  其中用到了Base64和MD5相关的函数:
<p>// md5下载:https://raw.githubusercontent. ... d5.js
let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f > 2;
o = (n & 3) 4;
u = (r & 15) 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f > 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n


虎牙直播



To view this video please enable JavaScript, and consider upgrading to a web browser that
supports HTML5 video






let Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f > 2;
o = (n & 3) 4;
u = (r & 15) 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f > 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n

浏览器抓取网页(猫抓Chrome插件使用方法、参照chrome插件的离线安装方法)

网站优化优采云 发表了文章 • 0 个评论 • 518 次浏览 • 2021-10-31 01:01 • 来自相关话题

  浏览器抓取网页(猫抓Chrome插件使用方法、参照chrome插件的离线安装方法)
  Mozhao Chrome 插件官方介绍 Mozhao 插件是一个插件,支持嗅探和抓取所有 Chrome 内核浏览器安装的网络视频链接。您可以从任何站点获取任何视频数据。使用此插件,一键获取您需要的链接,并自动抓取并保存。使用非常方便,打开需要下载文件的网站。您可以在此页面抓取自定义设置的所有内容,然后选择您要下载的内容下载到您的本地计算机,以方便使用!
  墨章Chrome插件使用方法
  1、mozhao插件离线安装方式是指chrome插件离线安装方式。输入 chrome://extensions 进入浏览器的扩展程序界面;最新chrome浏览器下载地址:. 点击添加扩展程序,快速将程序添加到谷歌浏览器并在右上角显示;
  
  2、用户可以自定义捕获的视频和音频内容;
  
  3、打开网站,点击猫手,可以抓取页面内容,后面有复制和下载选项,点击要下载的视频和音频文件,即可下载它!
  
  4. 以优酷土豆视频为例,点击图标即可:
  
  猫抓扩展方法嗅探爬取工具依赖于chrome API...如果需要更完美,请尝试IDM甚至Wireshark等软件...非常感谢热心朋友不断提交的网址无法捕获。有一些网站a站可以在设置中添加MIME类型的application/octet-stream来解决。这将捕获所有非媒体文件。知道地址可能下载不了流媒体(所以从1.0.7开始干掉) 查看全部

  浏览器抓取网页(猫抓Chrome插件使用方法、参照chrome插件的离线安装方法)
  Mozhao Chrome 插件官方介绍 Mozhao 插件是一个插件,支持嗅探和抓取所有 Chrome 内核浏览器安装的网络视频链接。您可以从任何站点获取任何视频数据。使用此插件,一键获取您需要的链接,并自动抓取并保存。使用非常方便,打开需要下载文件的网站。您可以在此页面抓取自定义设置的所有内容,然后选择您要下载的内容下载到您的本地计算机,以方便使用!
  墨章Chrome插件使用方法
  1、mozhao插件离线安装方式是指chrome插件离线安装方式。输入 chrome://extensions 进入浏览器的扩展程序界面;最新chrome浏览器下载地址:. 点击添加扩展程序,快速将程序添加到谷歌浏览器并在右上角显示;
  
  2、用户可以自定义捕获的视频和音频内容;
  
  3、打开网站,点击猫手,可以抓取页面内容,后面有复制和下载选项,点击要下载的视频和音频文件,即可下载它!
  
  4. 以优酷土豆视频为例,点击图标即可:
  
  猫抓扩展方法嗅探爬取工具依赖于chrome API...如果需要更完美,请尝试IDM甚至Wireshark等软件...非常感谢热心朋友不断提交的网址无法捕获。有一些网站a站可以在设置中添加MIME类型的application/octet-stream来解决。这将捕获所有非媒体文件。知道地址可能下载不了流媒体(所以从1.0.7开始干掉)

浏览器抓取网页(STM32获取的网页和浏览器获取不一样?)

网站优化优采云 发表了文章 • 0 个评论 • 107 次浏览 • 2021-10-31 00:20 • 来自相关话题

  浏览器抓取网页(STM32获取的网页和浏览器获取不一样?)
  获取到的网页内容与浏览器获取到的网页内容是否不同?
  编程环境:vc6.0
  工程:控制台应用
  程序的具体情况:根据http协议获取的网页内容是成功的,但是发现程序获取的网页和浏览器获取的网页不仅内容不同,最明显的是编码不同。我在浏览器中查看了源文件,发现字符编码是utf-8,但是程序下载的源文件是gb2312
  发送的协议内容为char *request = "GET / HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\nHost: \r\nConnection:关闭\r\n\r\n";
  C/C++ 代码
  
char host[] = "www.baidu.com";
char *request = "GET / HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\nHost: www.baidu.com\r\nConnection: Close\r\n\r\n";
  我想知道为什么不一样。我的请求都是模拟抓包软件中浏览器的请求,除了缺少Accept-Encoding: gzip, deflate
  除了一项,其他完全一样,(即使加了这一项,两个代码还是不一样)
  - - - 解决方案 - - - - - - - - - -
  你已经自己回答了所有问题,这个想法是正确的
  - - - 解决方案 - - - - - - - - - -
  需要发送相应的cookie
  - - - 解决方案 - - - - - - - - - -
  用抓包工具对比看看就清楚了
  - - - 解决方案 - - - - - - - - - -
  请求可能仍然不同,检查cookie,useragent。 查看全部

  浏览器抓取网页(STM32获取的网页和浏览器获取不一样?)
  获取到的网页内容与浏览器获取到的网页内容是否不同?
  编程环境:vc6.0
  工程:控制台应用
  程序的具体情况:根据http协议获取的网页内容是成功的,但是发现程序获取的网页和浏览器获取的网页不仅内容不同,最明显的是编码不同。我在浏览器中查看了源文件,发现字符编码是utf-8,但是程序下载的源文件是gb2312
  发送的协议内容为char *request = "GET / HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\nHost: \r\nConnection:关闭\r\n\r\n";
  C/C++ 代码
  
char host[] = "www.baidu.com";
char *request = "GET / HTTP/1.1\r\nAccept: */*\r\nAccept-Language: zh-cn\r\nHost: www.baidu.com\r\nConnection: Close\r\n\r\n";
  我想知道为什么不一样。我的请求都是模拟抓包软件中浏览器的请求,除了缺少Accept-Encoding: gzip, deflate
  除了一项,其他完全一样,(即使加了这一项,两个代码还是不一样)
  - - - 解决方案 - - - - - - - - - -
  你已经自己回答了所有问题,这个想法是正确的
  - - - 解决方案 - - - - - - - - - -
  需要发送相应的cookie
  - - - 解决方案 - - - - - - - - - -
  用抓包工具对比看看就清楚了
  - - - 解决方案 - - - - - - - - - -
  请求可能仍然不同,检查cookie,useragent。

浏览器抓取网页(代理支持·支持TLS/SSL协议)

网站优化优采云 发表了文章 • 0 个评论 • 154 次浏览 • 2021-10-31 00:19 • 来自相关话题

  浏览器抓取网页(代理支持·支持TLS/SSL协议)
  · 代理支持
  · 支持TLS/SSL协议
  2. Cheerio(也称为解析器):
  · Cheerio 提供专为服务器设计的快速、灵活和精益的核心jQuery 实现。
  · Cheerio 解析标记并提供 API 用于遍历/操作结果数据结构。
  特征:
  · 熟悉的语法:Cheerio 实现了核心 jQuery 的一个子集。它去除了jQuery库中所有的DOM不一致和浏览痕迹,充分展示了API的魅力。
  · 快速:Cheerio 使用非常简单且一致的 DOM 模型。因此,解析、操作和呈现非常高效。初步的端到端基准测试表明,cheerio 比 JSDOM 快约 8 倍。
  · 惊人的灵活性:Cheerio 几乎可以解析任何 HTML 或 XML 文档。
  3.渗透(又名解析器)
  · Osmosis 包括 HTML/XML 解析器和 webscraper。
  · 它是用 node.js 编写的,收录 css3/xpath 选择器和轻量级 http 包装器。
  · 没有像 Cheerio 这样的大依赖。
  特征:
  · 支持 CSS 3.0 和 XPath1.0 选择器的混合
  · 加载和搜索 AJAX 内容
  · 记录 URL、重定向和错误
  · Cookie jar 和自定义 cookie/header/user agent
  · 登录/表单提交、会话 cookie 和基本身份验证
  · 单代理或多代理处理代理故障
  · 重试和重定向限制
  4. Puppeteer(也称为无头 Chrome 自动化浏览器):
  Puppeteer 是一个 Node.js 库,它提供了一个简单但高效的 API,使您能够控制 Google 的 Chrome 或 Chromium 浏览器。
  它还可以在无头模式下运行 Chromium(对于在服务器上运行浏览器非常有用),并且可以在不需要用户界面的情况下发送和接收请求。
  最好的部分是它可以在后台操作,遵循 API 的说明。
  特征:
  · 单击按钮、链接和图像等元素
  · 自动表单提交
  · 导航页面
  · 使用时间线追踪找出问题所在
  · 直接在浏览器中自动测试用户界面和各种前端应用程序
  · 截屏
  · 将网页转换为pdf文件
  5. Apify SDK(也称为完整的网页抓取框架):
  · Apify SDK 是一个开源的Node.js 库,用于抓取和网页抓取。
  · Apify SDK 是一种独特的工具,可简化网络爬虫、爬虫、数据提取器和网络自动化任务的开发。
  · 提供管理和自动扩容headless Chrome/Puppeteer实例池、维护待爬取的URL队列、将爬取结果存储到本地文件系统或云端、轮换代理等工具。
  · 可以在自己的应用中独立使用,也可以在 Apify 云上运行的参与者之间使用。
  特征:
  · 使用 URL 的持久队列来深度获取整个 网站。
  · 运行CSV文件中收录100k URL的爬取代码,代码崩溃时不会丢失任何数据。
  · 通过旋转代理隐藏您的浏览器源。
  · 安排代码定期运行并发送错误通知。
  · 禁用网站 使用的浏览器指纹保护。
  随着时间的推移,对网络爬虫的需求不断增长。所以程序员们,你们的春天来了!搞定了很多只会复制粘贴数据的妹子。用你的代码让女孩认真起来!但是网络爬虫也需要谨慎。归根结底,信息不是可以被窃取和出售的东西。不要像这个老铁一样炫耀:
  
  
  发表评论,点赞,发朋友圈 查看全部

  浏览器抓取网页(代理支持·支持TLS/SSL协议)
  · 代理支持
  · 支持TLS/SSL协议
  2. Cheerio(也称为解析器):
  · Cheerio 提供专为服务器设计的快速、灵活和精益的核心jQuery 实现。
  · Cheerio 解析标记并提供 API 用于遍历/操作结果数据结构。
  特征:
  · 熟悉的语法:Cheerio 实现了核心 jQuery 的一个子集。它去除了jQuery库中所有的DOM不一致和浏览痕迹,充分展示了API的魅力。
  · 快速:Cheerio 使用非常简单且一致的 DOM 模型。因此,解析、操作和呈现非常高效。初步的端到端基准测试表明,cheerio 比 JSDOM 快约 8 倍。
  · 惊人的灵活性:Cheerio 几乎可以解析任何 HTML 或 XML 文档。
  3.渗透(又名解析器)
  · Osmosis 包括 HTML/XML 解析器和 webscraper。
  · 它是用 node.js 编写的,收录 css3/xpath 选择器和轻量级 http 包装器。
  · 没有像 Cheerio 这样的大依赖。
  特征:
  · 支持 CSS 3.0 和 XPath1.0 选择器的混合
  · 加载和搜索 AJAX 内容
  · 记录 URL、重定向和错误
  · Cookie jar 和自定义 cookie/header/user agent
  · 登录/表单提交、会话 cookie 和基本身份验证
  · 单代理或多代理处理代理故障
  · 重试和重定向限制
  4. Puppeteer(也称为无头 Chrome 自动化浏览器):
  Puppeteer 是一个 Node.js 库,它提供了一个简单但高效的 API,使您能够控制 Google 的 Chrome 或 Chromium 浏览器。
  它还可以在无头模式下运行 Chromium(对于在服务器上运行浏览器非常有用),并且可以在不需要用户界面的情况下发送和接收请求。
  最好的部分是它可以在后台操作,遵循 API 的说明。
  特征:
  · 单击按钮、链接和图像等元素
  · 自动表单提交
  · 导航页面
  · 使用时间线追踪找出问题所在
  · 直接在浏览器中自动测试用户界面和各种前端应用程序
  · 截屏
  · 将网页转换为pdf文件
  5. Apify SDK(也称为完整的网页抓取框架):
  · Apify SDK 是一个开源的Node.js 库,用于抓取和网页抓取。
  · Apify SDK 是一种独特的工具,可简化网络爬虫、爬虫、数据提取器和网络自动化任务的开发。
  · 提供管理和自动扩容headless Chrome/Puppeteer实例池、维护待爬取的URL队列、将爬取结果存储到本地文件系统或云端、轮换代理等工具。
  · 可以在自己的应用中独立使用,也可以在 Apify 云上运行的参与者之间使用。
  特征:
  · 使用 URL 的持久队列来深度获取整个 网站。
  · 运行CSV文件中收录100k URL的爬取代码,代码崩溃时不会丢失任何数据。
  · 通过旋转代理隐藏您的浏览器源。
  · 安排代码定期运行并发送错误通知。
  · 禁用网站 使用的浏览器指纹保护。
  随着时间的推移,对网络爬虫的需求不断增长。所以程序员们,你们的春天来了!搞定了很多只会复制粘贴数据的妹子。用你的代码让女孩认真起来!但是网络爬虫也需要谨慎。归根结底,信息不是可以被窃取和出售的东西。不要像这个老铁一样炫耀:
  
  
  发表评论,点赞,发朋友圈

浏览器抓取网页(一个模拟浏览器的执行框架(一):安装部署到执行)

网站优化优采云 发表了文章 • 0 个评论 • 96 次浏览 • 2021-10-29 20:19 • 来自相关话题

  浏览器抓取网页(一个模拟浏览器的执行框架(一):安装部署到执行)
  前言
  Selenium是一个模拟浏览器的自动化执行框架,但是如果每次执行都要打开浏览器处理任务,效率不高。最重要的是,如果安装在Centos7服务器环境下,打开浏览器模拟操作比较不合适,尤其是需要截取网页图片的时候。
  这时候可以考虑使用Chrome的无头浏览器模式。所谓无头浏览器模式,不需要打开浏览器,但是可以模拟打开浏览器的执行效果,一切都是无界面执行的。
  下面我们来看看如何安装部署到执行。
  1.安装chrome 1.1 添加谷歌的repo源
  vim /etc/yum.repos.d/google.repo
  在打开的空文件中填写以下内容
  [google]
name=Google-x86_64
baseurl=http://dl.google.com/linux/rpm/stable/x86_64
enabled=1
gpgcheck=0
gpgkey=https://dl-ssl.google.com/linu ... y.pub
  1.2 使用yum安装chrome浏览器
  $ sudo yum makecache
$ sudo yum install google-chrome-stable -y
  2.安装chromedriver驱动2.1 查看chrome版本
  安装成功后,查看安装的chrom版本如下:
  [root@locust03 ~]# google-chrome --version
Google Chrome 78.0.3904.108
[root@locust03 ~]#
  2.2 下载chromedriver
  selenium要执行chrome浏览器,需要安装驱动chromedriver,下载chromedriver可以从两个地方下载,点击访问如下:
  所以其实一般都是访问国内的镜像地址,如下:
  可以看到有很多版本可供下载。从上面可以看到chrome版本号Google Chrome 78.0.3904.108,所以大致按照版本号搜索。如下:
  点击最新版本号进入,可以看到下载的系统版本,如下:
  因为要安装在Centos7服务器上,所以选择linux64位版本。
  wget http://npm.taobao.org/mirrors/ ... 4.zip
  2.3 添加到环境变量 $PATH
  我下载了/opt目录下的chromedriver_linux64.zip,然后解压。最后编写环境配置文件/etc/profile。
  # 1.进入opt目录
[root@server opt]# cd /opt/
# 2.下载chromdirver
[root@server opt]# wget http://npm.taobao.org/mirrors/ ... 4.zip
# 3.解压zip包
[root@server opt]# unzip chromedriver_linux64.zip
# 4.得到一个二进制可执行文件
[root@server opt]# ls -ll chromedriver
-rwxrwxr-x 1 root root 11610824 Nov 19 02:20 chromedriver
# 5. 创建存放驱动的文件夹driver
[root@server opt]# mkdir -p /opt/driver/bin
# 6.将chromedirver放入文件夹driver中bin下
[root@server opt]# mv chromedriver /opt/driver/bin/
  配置环境变量如下:
  [root@server driver]# vim /etc/profile
...
# 添加内容
export DRIVER=/opt/driver
export PATH=$PATH:$DRIVER/bin
  设置环境变量立即生效,执行全局命令查看chromedirver版本:
  [root@server ~]# source /etc/profile
[root@server ~]#
[root@server ~]# chromedriver --version
ChromeDriver 78.0.3904.105 (60e2d8774a8151efa6a00b1f358371b1e0e07ee2-refs/branch-heads/3904@{#877})
[root@server ~]#
  能够全局执行 chromedriver 表示环境配置已经生效。
  3. 安装硒
  Selenium 可以简单地用 pip 安装在你项目的虚拟环境中
  pip3 install selenium
  执行查看安装的版本如下:
  [root@server selenium_ex]# pip3 install selenium
Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
Collecting selenium
Downloading http://mirrors.tencentyun.com/ ... y.whl (904kB)
|████████████████████████████████| 911kB 990kB/s
Requirement already satisfied: urllib3 in /usr/local/python3/lib/python3.7/site-packages (from selenium) (1.25.6)
Installing collected packages: selenium
Successfully installed selenium-3.141.0
[root@locust03 selenium_ex]#
  4. 脚本测试
  编写一个 test.py 脚本如下:
  from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
import time
import os.path
# 配置驱动路径
DRIVER_PATH = &#x27;/opt/driver/bin/chromedriver&#x27;
if __name__ == "__main__":
# 设置浏览器
options = Options()
options.add_argument(&#x27;--no-sandbox&#x27;)
options.add_argument(&#x27;--headless&#x27;) # 无头参数
options.add_argument(&#x27;--disable-gpu&#x27;)
# 启动浏览器
driver = Chrome(executable_path=DRIVER_PATH, options=options)
driver.maximize_window()
try:
# 访问页面
url = &#x27;https://www.jianshu.com/u/a94f887f8776&#x27;
driver.get(url)
time.sleep(1)
# 设置截屏整个网页的宽度以及高度
scroll_width = 1600
scroll_height = 1500
driver.set_window_size(scroll_width, scroll_height)
# 保存图片
img_path = os.getcwd()
img_name = time.strftime(&#x27;%Y-%m-%d-%H-%M-%S&#x27;, time.localtime(time.time()))
img = "%s.png" % os.path.join(img_path, img_name)
driver.get_screenshot_as_file(img)
# 关闭浏览器
driver.close()
driver.quit()
except Exception as e:
print(e)
  在服务器上执行以下操作:
  [root@server selenium_ex]# python3 test.py
[root@server selenium_ex]#
[root@server selenium_ex]# ls
2019-11-28-15-06-48.png test.py
[root@server selenium_ex]#
  下载图片查看一下,如下:
  可以看到已经可以正常模拟浏览器登录了,网页的图片也被截取了。从图中可以看出,只要有中文,就会显示方框符号。这是因为Centos7默认没有安装中文字体,所以打开chrom浏览器无法正常显示中文。
  解决办法是安装Centos7的中文字体,这里就不介绍了。 查看全部

  浏览器抓取网页(一个模拟浏览器的执行框架(一):安装部署到执行)
  前言
  Selenium是一个模拟浏览器的自动化执行框架,但是如果每次执行都要打开浏览器处理任务,效率不高。最重要的是,如果安装在Centos7服务器环境下,打开浏览器模拟操作比较不合适,尤其是需要截取网页图片的时候。
  这时候可以考虑使用Chrome的无头浏览器模式。所谓无头浏览器模式,不需要打开浏览器,但是可以模拟打开浏览器的执行效果,一切都是无界面执行的。
  下面我们来看看如何安装部署到执行。
  1.安装chrome 1.1 添加谷歌的repo源
  vim /etc/yum.repos.d/google.repo
  在打开的空文件中填写以下内容
  [google]
name=Google-x86_64
baseurl=http://dl.google.com/linux/rpm/stable/x86_64
enabled=1
gpgcheck=0
gpgkey=https://dl-ssl.google.com/linu ... y.pub
  1.2 使用yum安装chrome浏览器
  $ sudo yum makecache
$ sudo yum install google-chrome-stable -y
  2.安装chromedriver驱动2.1 查看chrome版本
  安装成功后,查看安装的chrom版本如下:
  [root@locust03 ~]# google-chrome --version
Google Chrome 78.0.3904.108
[root@locust03 ~]#
  2.2 下载chromedriver
  selenium要执行chrome浏览器,需要安装驱动chromedriver,下载chromedriver可以从两个地方下载,点击访问如下:
  所以其实一般都是访问国内的镜像地址,如下:
  可以看到有很多版本可供下载。从上面可以看到chrome版本号Google Chrome 78.0.3904.108,所以大致按照版本号搜索。如下:
  点击最新版本号进入,可以看到下载的系统版本,如下:
  因为要安装在Centos7服务器上,所以选择linux64位版本。
  wget http://npm.taobao.org/mirrors/ ... 4.zip
  2.3 添加到环境变量 $PATH
  我下载了/opt目录下的chromedriver_linux64.zip,然后解压。最后编写环境配置文件/etc/profile。
  # 1.进入opt目录
[root@server opt]# cd /opt/
# 2.下载chromdirver
[root@server opt]# wget http://npm.taobao.org/mirrors/ ... 4.zip
# 3.解压zip包
[root@server opt]# unzip chromedriver_linux64.zip
# 4.得到一个二进制可执行文件
[root@server opt]# ls -ll chromedriver
-rwxrwxr-x 1 root root 11610824 Nov 19 02:20 chromedriver
# 5. 创建存放驱动的文件夹driver
[root@server opt]# mkdir -p /opt/driver/bin
# 6.将chromedirver放入文件夹driver中bin下
[root@server opt]# mv chromedriver /opt/driver/bin/
  配置环境变量如下:
  [root@server driver]# vim /etc/profile
...
# 添加内容
export DRIVER=/opt/driver
export PATH=$PATH:$DRIVER/bin
  设置环境变量立即生效,执行全局命令查看chromedirver版本:
  [root@server ~]# source /etc/profile
[root@server ~]#
[root@server ~]# chromedriver --version
ChromeDriver 78.0.3904.105 (60e2d8774a8151efa6a00b1f358371b1e0e07ee2-refs/branch-heads/3904@{#877})
[root@server ~]#
  能够全局执行 chromedriver 表示环境配置已经生效。
  3. 安装硒
  Selenium 可以简单地用 pip 安装在你项目的虚拟环境中
  pip3 install selenium
  执行查看安装的版本如下:
  [root@server selenium_ex]# pip3 install selenium
Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
Collecting selenium
Downloading http://mirrors.tencentyun.com/ ... y.whl (904kB)
|████████████████████████████████| 911kB 990kB/s
Requirement already satisfied: urllib3 in /usr/local/python3/lib/python3.7/site-packages (from selenium) (1.25.6)
Installing collected packages: selenium
Successfully installed selenium-3.141.0
[root@locust03 selenium_ex]#
  4. 脚本测试
  编写一个 test.py 脚本如下:
  from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
import time
import os.path
# 配置驱动路径
DRIVER_PATH = &#x27;/opt/driver/bin/chromedriver&#x27;
if __name__ == "__main__":
# 设置浏览器
options = Options()
options.add_argument(&#x27;--no-sandbox&#x27;)
options.add_argument(&#x27;--headless&#x27;) # 无头参数
options.add_argument(&#x27;--disable-gpu&#x27;)
# 启动浏览器
driver = Chrome(executable_path=DRIVER_PATH, options=options)
driver.maximize_window()
try:
# 访问页面
url = &#x27;https://www.jianshu.com/u/a94f887f8776&#x27;
driver.get(url)
time.sleep(1)
# 设置截屏整个网页的宽度以及高度
scroll_width = 1600
scroll_height = 1500
driver.set_window_size(scroll_width, scroll_height)
# 保存图片
img_path = os.getcwd()
img_name = time.strftime(&#x27;%Y-%m-%d-%H-%M-%S&#x27;, time.localtime(time.time()))
img = "%s.png" % os.path.join(img_path, img_name)
driver.get_screenshot_as_file(img)
# 关闭浏览器
driver.close()
driver.quit()
except Exception as e:
print(e)
  在服务器上执行以下操作:
  [root@server selenium_ex]# python3 test.py
[root@server selenium_ex]#
[root@server selenium_ex]# ls
2019-11-28-15-06-48.png test.py
[root@server selenium_ex]#
  下载图片查看一下,如下:
  可以看到已经可以正常模拟浏览器登录了,网页的图片也被截取了。从图中可以看出,只要有中文,就会显示方框符号。这是因为Centos7默认没有安装中文字体,所以打开chrom浏览器无法正常显示中文。
  解决办法是安装Centos7的中文字体,这里就不介绍了。

浏览器抓取网页(大数据时代已然到来,抓取网页数据成为开展竞争对手分析、商业数据挖掘和科研的重要手段)

网站优化优采云 发表了文章 • 0 个评论 • 206 次浏览 • 2021-10-28 17:25 • 来自相关话题

  浏览器抓取网页(大数据时代已然到来,抓取网页数据成为开展竞争对手分析、商业数据挖掘和科研的重要手段)
  网页数据爬取是指从互联网上获取数据,并将获取的非结构化数据转化为结构化数据,最后将数据存储在本地计算机或数据库中的一种技术。
  目前,全球网络数据以每年40%左右的速度增长。IDC(互联网数据中心)报告显示,2013年全球数据4.4ZB。到2020年,全球数据总量将达到40ZB。大数据时代已经到来,网络数据采集已成为进行竞争对手分析、业务数据挖掘、科学研究的重要手段。
  
  我们在做数据分析的时候,会发现大部分的参考数据都是从网上获取的。互联网上的原创数据往往不尽如人意,难以满足我们的个性化需求。因此,我们需要根据实际情况有针对性地抓取网页数据。
  网页操作
  引用 Micorsoft Internet Controls 后,我们可以对页面做任何我们想做的事情,但是我们需要在主页上有一个页面,上帝说我们需要一个页面!
  1、打开网页
  我们以在百度上搜索“查虎”关键词为例:
  使用 CreateObject("internetexplorer.application")
  .可见 = 真
  .导航“怎么了”
  '关闭页面
  '。退出
  代码很简单,先创建一个IE对象,然后给一些属性赋值。Visible就是可见性,是指网页被操作时是否会看到网页。熟练后可以设置为False,这样不仅让程序在运行时有一种神秘感(而不是),而且速度也快了一点。
  
  但是有一点要记住,这个网页在我们打开后并没有关闭,这意味着程序结束后需要手动关闭它。如果网页不可见,则无法手动关闭。代码中的注释部分用于关闭网页。不用说,导航就是 URL。
  我们必须等到网页完全加载后才能开始抓取网页数据。这次我们使用:(从这里开始,所有的代码都需要写在With代码块中)
  而 .ReadyState 4 或 .Busy
  事件
  温德
  Busy 是网页的繁忙状态,ReadyState 是 HTTP 的五种就绪状态,对应如下:
  : 请求未初始化(open() 尚未被调用)。
  1:请求已经建立,但是还没有发送(send()没有被调用)。
  2:请求已经发送并正在处理中(通常现在可以从响应中获取内容头)。
  3:请求正在处理中;通常响应中有部分数据可用,但服务器还没有完成响应的生成。
  4:响应完成;您可以获取并使用服务器的响应。
  2、获取信息
  我们先爬取网页数据,然后过滤掉有用的部分,然后慢慢添加条件爬取。
  设置 dmt = .Document
  对于 i = 0 到 dmt.all.Length-1
  设置 htMent = dmt.all(i)
  使用 ActiveSheet
  .Cells(i + 2, "A") = htMent.tagName
  .Cells(i + 2, "B") = TypeName(htMent)
  .Cells(i + 2, "C") = htMent.ID
  .Cells(i + 2, "D") = htMent.Name
  .Cells(i + 2, "E") = htMent.Value
  .Cells(i + 2, "F") = htMent.Text
  .Cells(i + 2, "G") = htMent.innerText
  接下来我
  这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。还有其他几种方法:
  getElementById("IDName"):返回第一个带有IDName的标签 getElementsByName("a"):返回所有标签,返回值为集合 getElementsByClassName("css"):返回所有样式名称为css的标签,返回该值是一个集合。
  这些更方便用于在抓取所有页面内容后帮助过滤有效信息。 查看全部

  浏览器抓取网页(大数据时代已然到来,抓取网页数据成为开展竞争对手分析、商业数据挖掘和科研的重要手段)
  网页数据爬取是指从互联网上获取数据,并将获取的非结构化数据转化为结构化数据,最后将数据存储在本地计算机或数据库中的一种技术。
  目前,全球网络数据以每年40%左右的速度增长。IDC(互联网数据中心)报告显示,2013年全球数据4.4ZB。到2020年,全球数据总量将达到40ZB。大数据时代已经到来,网络数据采集已成为进行竞争对手分析、业务数据挖掘、科学研究的重要手段。
  
  我们在做数据分析的时候,会发现大部分的参考数据都是从网上获取的。互联网上的原创数据往往不尽如人意,难以满足我们的个性化需求。因此,我们需要根据实际情况有针对性地抓取网页数据。
  网页操作
  引用 Micorsoft Internet Controls 后,我们可以对页面做任何我们想做的事情,但是我们需要在主页上有一个页面,上帝说我们需要一个页面!
  1、打开网页
  我们以在百度上搜索“查虎”关键词为例:
  使用 CreateObject("internetexplorer.application")
  .可见 = 真
  .导航“怎么了”
  '关闭页面
  '。退出
  代码很简单,先创建一个IE对象,然后给一些属性赋值。Visible就是可见性,是指网页被操作时是否会看到网页。熟练后可以设置为False,这样不仅让程序在运行时有一种神秘感(而不是),而且速度也快了一点。
  
  但是有一点要记住,这个网页在我们打开后并没有关闭,这意味着程序结束后需要手动关闭它。如果网页不可见,则无法手动关闭。代码中的注释部分用于关闭网页。不用说,导航就是 URL。
  我们必须等到网页完全加载后才能开始抓取网页数据。这次我们使用:(从这里开始,所有的代码都需要写在With代码块中)
  而 .ReadyState 4 或 .Busy
  事件
  温德
  Busy 是网页的繁忙状态,ReadyState 是 HTTP 的五种就绪状态,对应如下:
  : 请求未初始化(open() 尚未被调用)。
  1:请求已经建立,但是还没有发送(send()没有被调用)。
  2:请求已经发送并正在处理中(通常现在可以从响应中获取内容头)。
  3:请求正在处理中;通常响应中有部分数据可用,但服务器还没有完成响应的生成。
  4:响应完成;您可以获取并使用服务器的响应。
  2、获取信息
  我们先爬取网页数据,然后过滤掉有用的部分,然后慢慢添加条件爬取。
  设置 dmt = .Document
  对于 i = 0 到 dmt.all.Length-1
  设置 htMent = dmt.all(i)
  使用 ActiveSheet
  .Cells(i + 2, "A") = htMent.tagName
  .Cells(i + 2, "B") = TypeName(htMent)
  .Cells(i + 2, "C") = htMent.ID
  .Cells(i + 2, "D") = htMent.Name
  .Cells(i + 2, "E") = htMent.Value
  .Cells(i + 2, "F") = htMent.Text
  .Cells(i + 2, "G") = htMent.innerText
  接下来我
  这段代码有点类似于JS,需要从IE.Document.all中找出页面上的所有节点。还有其他几种方法:
  getElementById("IDName"):返回第一个带有IDName的标签 getElementsByName("a"):返回所有标签,返回值为集合 getElementsByClassName("css"):返回所有样式名称为css的标签,返回该值是一个集合。
  这些更方便用于在抓取所有页面内容后帮助过滤有效信息。

浏览器抓取网页( Selenium处理多窗口场景多个窗口识别与切换(图))

网站优化优采云 发表了文章 • 0 个评论 • 97 次浏览 • 2021-10-27 22:09 • 来自相关话题

  浏览器抓取网页(
Selenium处理多窗口场景多个窗口识别与切换(图))
  网页框架及多窗口、多浏览器、上传弹窗处理
  Selenium 处理多窗口场景下的多窗口识别和切换
  单击某些链接将重新打开一个窗口。在这种情况下,如果要在新页面上进行操作,则必须先切换窗口。获取的窗口的唯一标识由一个句柄表示,因此您只需切换句柄即可在多个页面之间灵活操作。
  处理流程:
  1.先获取当前窗口的句柄
  driver.current_window_handle
  2.再次获取所有窗口句柄
  driver.window_handles
  3. 判断是否是你要操作的窗口,如果是,可以对该窗口进行操作,如果不是,则跳转到另一个窗口,对另一个窗口进行操作
  driver.switch_to_window
  Selenium处理帧多帧识别与切换
  做web自动化的时候,如果找不到某个元素,可能是因为该元素在iframe中
  框架是 HTML 中的框架。HTML中所谓的frame,是指在同一个浏览器中可以显示多个页面
  基于HTML的框架可以分为垂直框架和水平框架(cols,rows)
  车架分类
  frame标签收录三种类型:frameset、frame、iframe
  框架集和普通标签一样,不会影响正常定位。您可以使用任何 index、id、name、webelement 方法来定位框架
  Frame 和 iframe 对于 selenium 定位是相同的。Selenium 有一组方法来操作框架:
  driver.switch_to.frame() # 根据元素id或者index切换frame
driver.switch_to.default_content() # 切换到默认frame
driver.switch_to.parent_frame() # 切换到父级frame
  未嵌套的 iframe
  driver.switch_to_frame("frame的id")
driver.switch_to_frame("frame-index") # frame无id的时候可以根据索引来处理,索引从0开始,如:driver.switch_to_frame(0)
  嵌套 iframe
  这时候先进入iframe的父节点,再进入子节点,然后进行操作
  driver.switch_to.frame("父节点")
driver.switch_to.frame("子节点")
  多浏览器处理
  通过传递不同的参数来处理不同的浏览器,比如将浏览器类型作为参数传递给os.getenv方法,然后根据传递的参数判断选择不同的浏览器
  def setup(self):
browser = os.getenv("browser")
if browser == &#39;firefox&#39;:
self.driver = webdriver.Firefox()
elif browser == &#39;chrome&#39;
self.driver = webdriver.Chrome()
  文件上传处理输入标签
  可以直接使用send_keys(文件地址)上传文件:
  el = driver.find_element_by_id("上传按钮id")
el.send_keys("文件路径+文件名")
  子弹处理机制
  在页面上操作时,会遇到一些由JavaScript生成的alert、confirm、提示弹窗。这时候可以使用switch_to.alert()方法来定位。然后使用text/accept/dismiss/send_keys等方法进行操作。
  switch_to.alert() # 获取当前页面上的警告框
text() # 返回alert/confirm/prompt中的文字信息
accept() # 接受现有警告框
dissmiss() # 解散现有警告框
send_keys(keysToSend) # 发送文本至警告框,keysToSend:将文本发送至警告框
  最简单粗暴的判断弹窗是 JavaScript 生成的警报还是 div 组件的方法:无法在浏览器的开发者工具中定位警报 查看全部

  浏览器抓取网页(
Selenium处理多窗口场景多个窗口识别与切换(图))
  网页框架及多窗口、多浏览器、上传弹窗处理
  Selenium 处理多窗口场景下的多窗口识别和切换
  单击某些链接将重新打开一个窗口。在这种情况下,如果要在新页面上进行操作,则必须先切换窗口。获取的窗口的唯一标识由一个句柄表示,因此您只需切换句柄即可在多个页面之间灵活操作。
  处理流程:
  1.先获取当前窗口的句柄
  driver.current_window_handle
  2.再次获取所有窗口句柄
  driver.window_handles
  3. 判断是否是你要操作的窗口,如果是,可以对该窗口进行操作,如果不是,则跳转到另一个窗口,对另一个窗口进行操作
  driver.switch_to_window
  Selenium处理帧多帧识别与切换
  做web自动化的时候,如果找不到某个元素,可能是因为该元素在iframe中
  框架是 HTML 中的框架。HTML中所谓的frame,是指在同一个浏览器中可以显示多个页面
  基于HTML的框架可以分为垂直框架和水平框架(cols,rows)
  车架分类
  frame标签收录三种类型:frameset、frame、iframe
  框架集和普通标签一样,不会影响正常定位。您可以使用任何 index、id、name、webelement 方法来定位框架
  Frame 和 iframe 对于 selenium 定位是相同的。Selenium 有一组方法来操作框架:
  driver.switch_to.frame() # 根据元素id或者index切换frame
driver.switch_to.default_content() # 切换到默认frame
driver.switch_to.parent_frame() # 切换到父级frame
  未嵌套的 iframe
  driver.switch_to_frame("frame的id")
driver.switch_to_frame("frame-index") # frame无id的时候可以根据索引来处理,索引从0开始,如:driver.switch_to_frame(0)
  嵌套 iframe
  这时候先进入iframe的父节点,再进入子节点,然后进行操作
  driver.switch_to.frame("父节点")
driver.switch_to.frame("子节点")
  多浏览器处理
  通过传递不同的参数来处理不同的浏览器,比如将浏览器类型作为参数传递给os.getenv方法,然后根据传递的参数判断选择不同的浏览器
  def setup(self):
browser = os.getenv("browser")
if browser == &#39;firefox&#39;:
self.driver = webdriver.Firefox()
elif browser == &#39;chrome&#39;
self.driver = webdriver.Chrome()
  文件上传处理输入标签
  可以直接使用send_keys(文件地址)上传文件:
  el = driver.find_element_by_id("上传按钮id")
el.send_keys("文件路径+文件名")
  子弹处理机制
  在页面上操作时,会遇到一些由JavaScript生成的alert、confirm、提示弹窗。这时候可以使用switch_to.alert()方法来定位。然后使用text/accept/dismiss/send_keys等方法进行操作。
  switch_to.alert() # 获取当前页面上的警告框
text() # 返回alert/confirm/prompt中的文字信息
accept() # 接受现有警告框
dissmiss() # 解散现有警告框
send_keys(keysToSend) # 发送文本至警告框,keysToSend:将文本发送至警告框
  最简单粗暴的判断弹窗是 JavaScript 生成的警报还是 div 组件的方法:无法在浏览器的开发者工具中定位警报

浏览器抓取网页(新的CSS文件,重新渲染页面的charset属性值!)

网站优化优采云 发表了文章 • 0 个评论 • 143 次浏览 • 2021-10-27 09:14 • 来自相关话题

  浏览器抓取网页(新的CSS文件,重新渲染页面的charset属性值!)
  3)HTML 页面中的字符集属性值
  4.浏览器对HTML页面进行渲染和布局:
  1)。浏览器开始加载html代码,发现&lt;head&gt;标签中有一个&lt;link&gt;标签,引用了外部的CSS文件;
  2)。浏览器再次发送CSS文件请求,服务器返回这个CSS文件;
  3)。浏览器继续加载html&lt;body&gt;部分的代码,已经获取到css文件,可以渲染页面了;
  4)。浏览器在代码中找到引用图像的 &lt;img&gt; 标记并向服务器发送请求。这时候浏览器不会等到图片下载完成,而是会继续渲染后面的代码;
  服务器返回图片文件。由于图片占用一定面积,影响后面段落的排列,浏览器需要返回,重新渲染这部分代码;
  5)。浏览器发现&lt;script&gt;标签收录一行Javascript代码,快速运行;
  6)。Javascript 脚本执行了这个语句,它指示浏览器在代码中隐藏某个 &lt;div&gt; (style.display="none")。杯具,这样的元素突然少了,浏览器不得不重新渲染这部分代码;
  7)。终于等到了&lt;/html&gt;的到来,浏览器泪流满面……
  8)。等等,还没完,用户点击界面中的“皮肤”按钮,Javascript让浏览器改变&lt;link&gt;标签的CSS路径;
  9)。浏览器把大家召集到这里&lt;div&gt;&lt;span&gt;&lt;ul&gt;&lt;li&gt;,“大家收拾收拾,我们要回来了……”,浏览器向服务器CSS文件请求更新,重新渲染页面.
  注意:Win10打开host文件的方法:在运行中输入(win+R):C:\Windows\System32\drivers\etc。
  2.2 JavaScript 引擎2.2.1 什么是 JavaScript 引擎?
  “JavaScript 引擎”通常被称为一种虚拟机。“虚拟机”是指给定计算机系统的软件驱动模拟器。虚拟机的种类很多,根据它们模拟或替代真实物理机的准确程度来分类。
  2.2.2 JavaScript 引擎是做什么的?
  JavaScript 的基本工作是将开发者编写的 JavaScript 代码转换为浏览器可以理解甚至在应用程序中使用的最优化的快捷代码。例如,当你写 var a = 1 + 1; 这样一段代码,JavaScript引擎所做的就是理解(解析)你的代码,并将a的值改为2。
  2.2.3 主要的 JavaScript 引擎有哪些?
  WebKit 的 JavaScriptCore 和 Google 的 V8 引擎。
  2.2.4 JavaScriptCore和V8引擎解析源码的过程
  JavaScriptCore 执行一系列步骤来解释和优化脚本:
  1) 首先进行词法分析,即将源代码分解为一系列具有明确含义的符号或字符串。
  2) 然后用语法分析器对这些符号进行分析,构建成语法树。
  3) 然后四个JIT(Just-In-Time)进程开始参与,分析并执行解析器生成的字节码。
  简单来说,JavaScript 引擎会加载你的源代码,将其分解为字符串(也称为分词),将这些字符串转换为编译器可以理解的字节码,然后执行这些字节码。
  Google 的 V8 引擎是用 C++ 编写的,它还可以编译和执行 JavaScript 源代码,处理内存分配和垃圾采集。它被设计为由两个编译器组成,可以直接将源代码编译成机器码:
  1) Full-codegen:输出未优化代码的快速编译器
  2) Crankshaft:输出高效和优化代码的慢速编译器
  如果 Crankshaft 确定要优化的代码是 Full-codegen 生成的未优化代码,它将替换 Full-codegen。这个过程称为“曲轴加工”。
  一旦在编译过程中生成机器码,引擎就会向浏览器公开所有数据类型、运算符、对象、ECMA 标准中指定的函数或任何需要在运行时使用的内容。NativeScript 就是这种情况。
  3.Chrome浏览器的开发者工具面板介绍3.1 Chrome浏览器的开发者工具如何打开:1)功能键F12或Ctrl+Shift+j或Ctrl+Shift+j打开;
  2) 打开浏览器右上角的用户设置下拉菜单,选择更多工具,然后选择开发者工具打开开发者工具。
  3.2 开发者工具工具栏中常用面板介绍
  元素:在网页源代码HTML中查找任意元素,手动修改任意元素的属性和样式,在浏览器中实时获取反馈。
  Console:记录开发者在开发过程中的日志信息,可以作为命令行Shell与JS交互。
  Sources:Sources 功能面板是一个资源面板。它主要分为四个部分。这四个部分不是独立的。它们相互关联,相互作用,实现了一个重要的功能:监控js在执行期间的活动。简单地说,它是一个断点。
  网络:对网页发起请求后,分析分析HTTP请求后得到的请求资源信息(包括状态、资源类型、大小、花费时间等)。基于此可以优化网络性能。
  Timeline:记录并分析网站生命周期中发生的各种事件,从而提高网页运行时间的性能。
  Profiles:如果你需要更多Timeline可以提供的信息,可以尝试Profiles,比如记录JS CPU执行时间细节,显示JS对象和相关DOM节点的内存消耗,记录内存分配细节。
  Application:记录网站加载的所有资源信息,包括存储数据(Local Storage、Session Storage、IndexedDB、Web SQL、Cookies)、缓存数据、字体、图片、脚本、样式表等。
  安全性:判断当前网页是否安全。
  审计:诊断当前网页使用情况和网页性能,并给出一些优化建议。例如,列出所有未使用的 CSS 文件。
  3.2.1 元素面板 如何打开元素面板:
  1) 打开开发者工具后,在开发者工具面板中选择Element选项卡;
  2) 打开浏览器后,右击查看(火狐浏览器是“评论元素”)
  元素面板的常用功能:
  1)实时编辑DOM节点
  在 Element 面板的 DOM 树视图中,呈现了当前页面中的所有 DOM 节点。用鼠标双击任意 DOM 节点来修改属性值。修改完成后,按回车键。浏览器将立即显示修改后的效果。
  注意:这种及时的修改只是临时修改,只能用于调试。在实际应用中,调试后往往在本地代码中修改正确的属性值。
  2)实时编辑CSS样式
  在Element面板中还可以实时修改当前页面DOM元素的样式,修改后的元素样式会立即生效。
  实时修改 DOM 元素样式的步骤:
  首先选择这个 DOM 元素。如果没有打开开发者工具,可以在要修改的DOM元素上右键--&gt;查看元素,然后在控制面板右侧选择Style,可以看到当前所有的CSS样式DOM元素,双击即可修改 的CSS属性值,修改立即生效。如果你已经打开了开发者工具,可以先点击开发者工具面板最左边的放大镜,然后在页面上点击要修改的DOM元素,选择这个要调试的DOM元素。此时,控制面板右侧的 Style 显示了当前选择的 DOM 元素的 CSS 属性。双击属性值进行修改。
  注意:这种及时的修改只是临时修改,只能用于调试。在实际应用中,调试后往往在本地代码中修改正确的属性值。
  3)打开盒子模型,调试框架参数
  点击右边的Computed选项卡可以看到当前选中元素的box模型参数,所有的值都可以修改。点击不同位置(上、下、左、右)可以修改padding、border、margin属性的值。也可以通过修改盒子模型中间的数据来改变元素的宽高。浏览器中的当前元素在修改时会响应式变化,左侧的Element面板会自动添加对应的Stylt属性值,当页面显示的样式符合要求时,可以停止修改,然后复制将Element中生成的属性值写入代码中,样式可以永久修改。
  3.2.2 控制台面板
  1)查看脚本运行过程中的异常信息;
  因为 JavaScript 是弱语言类型,所以语法要求不严格。而且JavaScript是解释型语言,代码中不会出现中文标点等错误提示,只有运行结束才会向控制台抛出异常。
  如果想查看具体的异常信息,直接点击右边的异常信息控制台,带我们到程序中出错的具体位置:
  2)打印日志信息;
  上面说到简单的调试,可以使用alert方法在弹窗中显示想要查看的信息。但是,警报有一个缺点:它会阻塞程序,无法显示对象的详细信息。当弹出多条消息时,您必须单击确定才能在下一个弹出窗口中查看信息。这些问题可以通过使用控制台提供的打印日志的方法完美解决。
  Console中打印日志常用的方法有:
  A) console.log("info") 显示一般的基本日志信息。当需要显示的基本日志信息过多时,可以使用console.grop()方法对日志进行分组;
  B) Console.warn("info") 显示带有黄色小图标的警告信息;
  C) Console.error("info") 用红色小图标显示错误信息;
  Console打印日志的使用场景:
  A) 在代码中使用console.log()打印日志信息:
  B) 使用 console.log() 直接在控制台打印信息:
  C) 如何清除控制台中的信息:
  直接在控制台输出console.clear()方法,按回车清除控制台上的信息。另一种方法是直接点击控制台左上角的清除日志按钮来清除日志信息。
  3)运行 JavaScript 脚本
  控制台还有一个神奇的功能就是可以运行你输入的JavaScript脚本,非常实用。
  实际场景一:快速验证JavaScript中的方法。
  根据输出一个十进制数,要求:只保留两位小数。通过查看JavaScript API,发现Number对象有一个toFixed方法来指定小数位的长度,但是没有例子。最快的尝试方法是在控制台上验证:
  console.log(new Number("3.1415926").toFixed(2));
  实际场景二:在控制台输入JavaScript方法时有提示。
  通过文档获取指定id的节点的方法是document.getElementById("id")。但是由于MyEclipse,在Eclipse中编写JavaScript时可能没有提示。太痛苦了,容易出错。这时候就可以通过控制台上的方法提示来完成方法了。
  如上图:我们不需要完全输入方法名称,只需使用键盘的上下键选择需要的方法,根据提示按回车即可。
  D) 控制台面板中的全局搜索(快捷键 Ctrl+Shift+F)
  打开全局搜索,输入关键字,可以搜索到所有收录该关键字的文件。
  应用场景:刚到公司,不熟悉公司业务。登录页面有几千行代码,我就是想找个登录方式,这时候输入登录方式名就可以搜索到登录方式所在的页面了。单击它可以找到此方法。
  3.2.3 源面板
  源资源面板显示加载当前页面所需的所有资源。
  在 Source 面板中,您可以找到当前浏览器加载的页面,然后调试其中的 JavaScript 脚本。在使用 Chrome 开发者工具的过程中会给出具体说明。
  3.2.4 网络(网络)面板
  网络面板可以在页面上记录网络请求的详细信息。请求发起后,对HTTP请求进行解析后得到的请求资源信息(包括状态、资源信息、大小、使用时间、Request和Response等)可以基于此进行网络性能优化。
  控件控制网络的外观和功能。过滤器精确控制请求表中显示的内容。概览显示获取资源的时间线信息。Requests Table 显示了获取资源前后的所有资源信息。单击资源名称可以查看资源的详细信息。摘要显示请求总数、数据传输量和加载时间信息。
  NetWork面板的Requests Table收录了HTTP请求和响应的具体信息,是常用的。
  命名资源名称,点击名称可以查看资源的详细信息,包括Headers、Preview、Response、Cookies、Timing。StatusHTTP 状态代码。类型 请求的资源 MIME 类型。Initiator 标记发起请求的对象或进程(请求源)。解析器:请求是由 Chrome 的 HTML 解析器发起的。重定向:请求由 HTTP 页面重定向发起。Script:请求由Script脚本发起。其他:请求由其他进程发起,例如用户点击链接跳转到另一个页面或在地址栏中输入 URL 地址。大小 从服务器下载的文件和请求资源的大小。如果是从缓存中获取的资源,这一栏会显示(from cache) Time 请求或下载的时间,从发起请求到获得响应的总时间。时间线显示所有网络请求的视觉瀑布(时间状态轴)。点击时间轴可以查看请求的详细信息,点击列头可以根据指定的字段进行排序。
  查看特定资源的详细信息
  点击资源名称,可以查看资源的详细信息。根据选择的资源类型显示的信息也不同,可能包括以下Tab信息:
  Headers 资源的 HTTP 头信息。预览根据您选择的资源类型(JSON、图像、文本)显示相应的预览。响应显示 HTTP 响应信息。Cookies 显示资源在 HTTP Request 和 Response 过程中的 cookie 信息。Timing 显示了资源各部分在整个请求生命周期中所花费的时间。
  对以上4个Tab详细解释每个功能: 查看全部

  浏览器抓取网页(新的CSS文件,重新渲染页面的charset属性值!)
  3)HTML 页面中的字符集属性值
  4.浏览器对HTML页面进行渲染和布局:
  1)。浏览器开始加载html代码,发现&lt;head&gt;标签中有一个&lt;link&gt;标签,引用了外部的CSS文件;
  2)。浏览器再次发送CSS文件请求,服务器返回这个CSS文件;
  3)。浏览器继续加载html&lt;body&gt;部分的代码,已经获取到css文件,可以渲染页面了;
  4)。浏览器在代码中找到引用图像的 &lt;img&gt; 标记并向服务器发送请求。这时候浏览器不会等到图片下载完成,而是会继续渲染后面的代码;
  服务器返回图片文件。由于图片占用一定面积,影响后面段落的排列,浏览器需要返回,重新渲染这部分代码;
  5)。浏览器发现&lt;script&gt;标签收录一行Javascript代码,快速运行;
  6)。Javascript 脚本执行了这个语句,它指示浏览器在代码中隐藏某个 &lt;div&gt; (style.display="none")。杯具,这样的元素突然少了,浏览器不得不重新渲染这部分代码;
  7)。终于等到了&lt;/html&gt;的到来,浏览器泪流满面……
  8)。等等,还没完,用户点击界面中的“皮肤”按钮,Javascript让浏览器改变&lt;link&gt;标签的CSS路径;
  9)。浏览器把大家召集到这里&lt;div&gt;&lt;span&gt;&lt;ul&gt;&lt;li&gt;,“大家收拾收拾,我们要回来了……”,浏览器向服务器CSS文件请求更新,重新渲染页面.
  注意:Win10打开host文件的方法:在运行中输入(win+R):C:\Windows\System32\drivers\etc。
  2.2 JavaScript 引擎2.2.1 什么是 JavaScript 引擎?
  “JavaScript 引擎”通常被称为一种虚拟机。“虚拟机”是指给定计算机系统的软件驱动模拟器。虚拟机的种类很多,根据它们模拟或替代真实物理机的准确程度来分类。
  2.2.2 JavaScript 引擎是做什么的?
  JavaScript 的基本工作是将开发者编写的 JavaScript 代码转换为浏览器可以理解甚至在应用程序中使用的最优化的快捷代码。例如,当你写 var a = 1 + 1; 这样一段代码,JavaScript引擎所做的就是理解(解析)你的代码,并将a的值改为2。
  2.2.3 主要的 JavaScript 引擎有哪些?
  WebKit 的 JavaScriptCore 和 Google 的 V8 引擎。
  2.2.4 JavaScriptCore和V8引擎解析源码的过程
  JavaScriptCore 执行一系列步骤来解释和优化脚本:
  1) 首先进行词法分析,即将源代码分解为一系列具有明确含义的符号或字符串。
  2) 然后用语法分析器对这些符号进行分析,构建成语法树。
  3) 然后四个JIT(Just-In-Time)进程开始参与,分析并执行解析器生成的字节码。
  简单来说,JavaScript 引擎会加载你的源代码,将其分解为字符串(也称为分词),将这些字符串转换为编译器可以理解的字节码,然后执行这些字节码。
  Google 的 V8 引擎是用 C++ 编写的,它还可以编译和执行 JavaScript 源代码,处理内存分配和垃圾采集。它被设计为由两个编译器组成,可以直接将源代码编译成机器码:
  1) Full-codegen:输出未优化代码的快速编译器
  2) Crankshaft:输出高效和优化代码的慢速编译器
  如果 Crankshaft 确定要优化的代码是 Full-codegen 生成的未优化代码,它将替换 Full-codegen。这个过程称为“曲轴加工”。
  一旦在编译过程中生成机器码,引擎就会向浏览器公开所有数据类型、运算符、对象、ECMA 标准中指定的函数或任何需要在运行时使用的内容。NativeScript 就是这种情况。
  3.Chrome浏览器的开发者工具面板介绍3.1 Chrome浏览器的开发者工具如何打开:1)功能键F12或Ctrl+Shift+j或Ctrl+Shift+j打开;
  2) 打开浏览器右上角的用户设置下拉菜单,选择更多工具,然后选择开发者工具打开开发者工具。
  3.2 开发者工具工具栏中常用面板介绍
  元素:在网页源代码HTML中查找任意元素,手动修改任意元素的属性和样式,在浏览器中实时获取反馈。
  Console:记录开发者在开发过程中的日志信息,可以作为命令行Shell与JS交互。
  Sources:Sources 功能面板是一个资源面板。它主要分为四个部分。这四个部分不是独立的。它们相互关联,相互作用,实现了一个重要的功能:监控js在执行期间的活动。简单地说,它是一个断点。
  网络:对网页发起请求后,分析分析HTTP请求后得到的请求资源信息(包括状态、资源类型、大小、花费时间等)。基于此可以优化网络性能。
  Timeline:记录并分析网站生命周期中发生的各种事件,从而提高网页运行时间的性能。
  Profiles:如果你需要更多Timeline可以提供的信息,可以尝试Profiles,比如记录JS CPU执行时间细节,显示JS对象和相关DOM节点的内存消耗,记录内存分配细节。
  Application:记录网站加载的所有资源信息,包括存储数据(Local Storage、Session Storage、IndexedDB、Web SQL、Cookies)、缓存数据、字体、图片、脚本、样式表等。
  安全性:判断当前网页是否安全。
  审计:诊断当前网页使用情况和网页性能,并给出一些优化建议。例如,列出所有未使用的 CSS 文件。
  3.2.1 元素面板 如何打开元素面板:
  1) 打开开发者工具后,在开发者工具面板中选择Element选项卡;
  2) 打开浏览器后,右击查看(火狐浏览器是“评论元素”)
  元素面板的常用功能:
  1)实时编辑DOM节点
  在 Element 面板的 DOM 树视图中,呈现了当前页面中的所有 DOM 节点。用鼠标双击任意 DOM 节点来修改属性值。修改完成后,按回车键。浏览器将立即显示修改后的效果。
  注意:这种及时的修改只是临时修改,只能用于调试。在实际应用中,调试后往往在本地代码中修改正确的属性值。
  2)实时编辑CSS样式
  在Element面板中还可以实时修改当前页面DOM元素的样式,修改后的元素样式会立即生效。
  实时修改 DOM 元素样式的步骤:
  首先选择这个 DOM 元素。如果没有打开开发者工具,可以在要修改的DOM元素上右键--&gt;查看元素,然后在控制面板右侧选择Style,可以看到当前所有的CSS样式DOM元素,双击即可修改 的CSS属性值,修改立即生效。如果你已经打开了开发者工具,可以先点击开发者工具面板最左边的放大镜,然后在页面上点击要修改的DOM元素,选择这个要调试的DOM元素。此时,控制面板右侧的 Style 显示了当前选择的 DOM 元素的 CSS 属性。双击属性值进行修改。
  注意:这种及时的修改只是临时修改,只能用于调试。在实际应用中,调试后往往在本地代码中修改正确的属性值。
  3)打开盒子模型,调试框架参数
  点击右边的Computed选项卡可以看到当前选中元素的box模型参数,所有的值都可以修改。点击不同位置(上、下、左、右)可以修改padding、border、margin属性的值。也可以通过修改盒子模型中间的数据来改变元素的宽高。浏览器中的当前元素在修改时会响应式变化,左侧的Element面板会自动添加对应的Stylt属性值,当页面显示的样式符合要求时,可以停止修改,然后复制将Element中生成的属性值写入代码中,样式可以永久修改。
  3.2.2 控制台面板
  1)查看脚本运行过程中的异常信息;
  因为 JavaScript 是弱语言类型,所以语法要求不严格。而且JavaScript是解释型语言,代码中不会出现中文标点等错误提示,只有运行结束才会向控制台抛出异常。
  如果想查看具体的异常信息,直接点击右边的异常信息控制台,带我们到程序中出错的具体位置:
  2)打印日志信息;
  上面说到简单的调试,可以使用alert方法在弹窗中显示想要查看的信息。但是,警报有一个缺点:它会阻塞程序,无法显示对象的详细信息。当弹出多条消息时,您必须单击确定才能在下一个弹出窗口中查看信息。这些问题可以通过使用控制台提供的打印日志的方法完美解决。
  Console中打印日志常用的方法有:
  A) console.log("info") 显示一般的基本日志信息。当需要显示的基本日志信息过多时,可以使用console.grop()方法对日志进行分组;
  B) Console.warn("info") 显示带有黄色小图标的警告信息;
  C) Console.error("info") 用红色小图标显示错误信息;
  Console打印日志的使用场景:
  A) 在代码中使用console.log()打印日志信息:
  B) 使用 console.log() 直接在控制台打印信息:
  C) 如何清除控制台中的信息:
  直接在控制台输出console.clear()方法,按回车清除控制台上的信息。另一种方法是直接点击控制台左上角的清除日志按钮来清除日志信息。
  3)运行 JavaScript 脚本
  控制台还有一个神奇的功能就是可以运行你输入的JavaScript脚本,非常实用。
  实际场景一:快速验证JavaScript中的方法。
  根据输出一个十进制数,要求:只保留两位小数。通过查看JavaScript API,发现Number对象有一个toFixed方法来指定小数位的长度,但是没有例子。最快的尝试方法是在控制台上验证:
  console.log(new Number("3.1415926").toFixed(2));
  实际场景二:在控制台输入JavaScript方法时有提示。
  通过文档获取指定id的节点的方法是document.getElementById("id")。但是由于MyEclipse,在Eclipse中编写JavaScript时可能没有提示。太痛苦了,容易出错。这时候就可以通过控制台上的方法提示来完成方法了。
  如上图:我们不需要完全输入方法名称,只需使用键盘的上下键选择需要的方法,根据提示按回车即可。
  D) 控制台面板中的全局搜索(快捷键 Ctrl+Shift+F)
  打开全局搜索,输入关键字,可以搜索到所有收录该关键字的文件。
  应用场景:刚到公司,不熟悉公司业务。登录页面有几千行代码,我就是想找个登录方式,这时候输入登录方式名就可以搜索到登录方式所在的页面了。单击它可以找到此方法。
  3.2.3 源面板
  源资源面板显示加载当前页面所需的所有资源。
  在 Source 面板中,您可以找到当前浏览器加载的页面,然后调试其中的 JavaScript 脚本。在使用 Chrome 开发者工具的过程中会给出具体说明。
  3.2.4 网络(网络)面板
  网络面板可以在页面上记录网络请求的详细信息。请求发起后,对HTTP请求进行解析后得到的请求资源信息(包括状态、资源信息、大小、使用时间、Request和Response等)可以基于此进行网络性能优化。
  控件控制网络的外观和功能。过滤器精确控制请求表中显示的内容。概览显示获取资源的时间线信息。Requests Table 显示了获取资源前后的所有资源信息。单击资源名称可以查看资源的详细信息。摘要显示请求总数、数据传输量和加载时间信息。
  NetWork面板的Requests Table收录了HTTP请求和响应的具体信息,是常用的。
  命名资源名称,点击名称可以查看资源的详细信息,包括Headers、Preview、Response、Cookies、Timing。StatusHTTP 状态代码。类型 请求的资源 MIME 类型。Initiator 标记发起请求的对象或进程(请求源)。解析器:请求是由 Chrome 的 HTML 解析器发起的。重定向:请求由 HTTP 页面重定向发起。Script:请求由Script脚本发起。其他:请求由其他进程发起,例如用户点击链接跳转到另一个页面或在地址栏中输入 URL 地址。大小 从服务器下载的文件和请求资源的大小。如果是从缓存中获取的资源,这一栏会显示(from cache) Time 请求或下载的时间,从发起请求到获得响应的总时间。时间线显示所有网络请求的视觉瀑布(时间状态轴)。点击时间轴可以查看请求的详细信息,点击列头可以根据指定的字段进行排序。
  查看特定资源的详细信息
  点击资源名称,可以查看资源的详细信息。根据选择的资源类型显示的信息也不同,可能包括以下Tab信息:
  Headers 资源的 HTTP 头信息。预览根据您选择的资源类型(JSON、图像、文本)显示相应的预览。响应显示 HTTP 响应信息。Cookies 显示资源在 HTTP Request 和 Response 过程中的 cookie 信息。Timing 显示了资源各部分在整个请求生命周期中所花费的时间。
  对以上4个Tab详细解释每个功能:

浏览器抓取网页(浏览器抓取网页,可以抓一些本站的ajax接口)

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2021-10-23 19:01 • 来自相关话题

  浏览器抓取网页(浏览器抓取网页,可以抓一些本站的ajax接口)
  浏览器抓取网页,可以抓一些本站的ajax接口,我们在爬虫前会存一个可执行的js代码文件,这样抓取网页时只需加载这个代码文件即可,类似与模拟浏览器。还可以抓取网页任意内容,但是不能获取后端页面地址及页面表单信息,所以一般不会存为文件,因为不能全局代码,而且获取了后端页面也不能全局代码。抓取出来的数据也有可能是无效数据。
  所以如果把抓取到的数据做一些转换处理也可以提高爬虫的性能。1.通过一个简单的整数转整数运算来提高性能,这里的整数转整数只是一个简单的数组转整数的运算,我们只能转整数,也就是0-9里的所有整数,这样效率肯定是比较低的。2.通过json或xml里面的api来提高爬虫性能,我们可以抓取一些重要的信息,可以在request里用一个双花括号将相应字段写到这个数组里,然后通过一个转换函数将这个双花括号里的所有字段转换成字符串表达式,然后再存入对应的xml解析方法即可。
  另外由于这个双花括号里的字段是类似unicode等unicode编码不统一的字符串,所以xml解析方法要正确对待unicode编码,这个方法能将会得到完整的字符串。比如这个asp程序在收到我们的xml文件后,会将它转换成csv格式的文件,同时获取表单里的type属性,type是0就是数字,type是1就是字符串,就可以通过html.xpath获取表单里的一切内容了。
  3.使用加密算法:在ajax接口进行请求时,为了防止在后端返回的内容被盗号,所以前端必须有权限检测。加密算法(rsa,skl,dfa等):为了解决这一问题,我们可以通过xmlhttprequest实现加密机制,那么我们再在request里加一个端口就可以了。4.使用正则表达式:如果我们想将可能重复的部分字符串匹配出来,比如标点符号。
  使用正则表达式正则表达式有成千上万个规则,每一个规则都可以用来匹配数千个字符,但是正则表达式的结构为字符串关键字匹配,参数前匹配,参数后匹配。因此可以对待每一个规则写一个正则表达式语法规则,这样就可以将反复出现的规则用一个表达式匹配出来。5.使用正则表达式的递归:通过递归方法,可以使前端请求响应时间达到直接使用一个http来请求,接受http响应进行处理,然后将请求响应里的相应可以转换成某一固定的字符串。
  例如我们想将本站登录接口的返回值解析为email,qq号。那么我们可以调用token函数(-address)将本站登录接口的返回值转换成emailqq号,从而实现某一请求中某条浏览器获取信息。正则表达式的匹配规则(-palindrome):匹配所有'^palindrome'的字符,匹配所有'^a'。 查看全部

  浏览器抓取网页(浏览器抓取网页,可以抓一些本站的ajax接口)
  浏览器抓取网页,可以抓一些本站的ajax接口,我们在爬虫前会存一个可执行的js代码文件,这样抓取网页时只需加载这个代码文件即可,类似与模拟浏览器。还可以抓取网页任意内容,但是不能获取后端页面地址及页面表单信息,所以一般不会存为文件,因为不能全局代码,而且获取了后端页面也不能全局代码。抓取出来的数据也有可能是无效数据。
  所以如果把抓取到的数据做一些转换处理也可以提高爬虫的性能。1.通过一个简单的整数转整数运算来提高性能,这里的整数转整数只是一个简单的数组转整数的运算,我们只能转整数,也就是0-9里的所有整数,这样效率肯定是比较低的。2.通过json或xml里面的api来提高爬虫性能,我们可以抓取一些重要的信息,可以在request里用一个双花括号将相应字段写到这个数组里,然后通过一个转换函数将这个双花括号里的所有字段转换成字符串表达式,然后再存入对应的xml解析方法即可。
  另外由于这个双花括号里的字段是类似unicode等unicode编码不统一的字符串,所以xml解析方法要正确对待unicode编码,这个方法能将会得到完整的字符串。比如这个asp程序在收到我们的xml文件后,会将它转换成csv格式的文件,同时获取表单里的type属性,type是0就是数字,type是1就是字符串,就可以通过html.xpath获取表单里的一切内容了。
  3.使用加密算法:在ajax接口进行请求时,为了防止在后端返回的内容被盗号,所以前端必须有权限检测。加密算法(rsa,skl,dfa等):为了解决这一问题,我们可以通过xmlhttprequest实现加密机制,那么我们再在request里加一个端口就可以了。4.使用正则表达式:如果我们想将可能重复的部分字符串匹配出来,比如标点符号。
  使用正则表达式正则表达式有成千上万个规则,每一个规则都可以用来匹配数千个字符,但是正则表达式的结构为字符串关键字匹配,参数前匹配,参数后匹配。因此可以对待每一个规则写一个正则表达式语法规则,这样就可以将反复出现的规则用一个表达式匹配出来。5.使用正则表达式的递归:通过递归方法,可以使前端请求响应时间达到直接使用一个http来请求,接受http响应进行处理,然后将请求响应里的相应可以转换成某一固定的字符串。
  例如我们想将本站登录接口的返回值解析为email,qq号。那么我们可以调用token函数(-address)将本站登录接口的返回值转换成emailqq号,从而实现某一请求中某条浏览器获取信息。正则表达式的匹配规则(-palindrome):匹配所有'^palindrome'的字符,匹配所有'^a'。

浏览器抓取网页(浏览器向主机发起一个HTTP-GET方法请求请求)

网站优化优采云 发表了文章 • 0 个评论 • 107 次浏览 • 2021-10-23 13:14 • 来自相关话题

  浏览器抓取网页(浏览器向主机发起一个HTTP-GET方法请求请求)
  浏览器向主机发起 HTTP-GET 方法消息请求。请求中收录访问的URL,即KeepAlive、长连接,以及User-Agent用户浏览器操作系统信息、编码等。
  第五步:有些服务会做永久重定向响应
  对于大型网站有多个宿主站点,负载均衡或者导入流量提高SEO排名,往往不是直接返回请求页面,而是重定向。返回的状态码不是200OK,而是301302以3开头的重定向码。浏览器得到重定向响应后,在响应消息的Location项中找到重定向地址,浏览器就可以在第一步重新访问。
  重定向的作用:重定向是负载均衡或导入流量,提高SEO排名。使用前端服务器接受请求,然后加载到不同的主机上,可以大大提高站点的并发处理能力;重定向还可以将多个域名的访问集中到一个站点;因为,它会被搜索引擎认为是两个网站,每个中的链接数都会减少,从而降低排名。永久重定向会将两个地址关联起来,搜索引擎会考虑相同的网站以提高排名。
  第 6 步:浏览器跟踪重定向地址
  浏览器知道重定向后的最终访问地址后,再次发送与上述内容相同的http请求。
  第七步:服务器处理请求
  服务器接收获取请求,然后对其进行处理并返回响应。
  第 8 步:服务器发出 HTML 响应
  返回状态码200 OK,表示服务器可以响应请求并返回消息。由于标题中的 Content-type 是“text/html”,浏览器将其呈现为 HTML,而不是下载文件。
  第九步:释放TCP连接
  浏览器所在的主机向服务器发送连接释放消息,然后停止发送数据;
  服务器收到释放消息后发送确认消息,然后将未完成的数据发送到服务器上;
  服务器数据传输完成后,向客户端发送连接释放消息;
  客户端收到消息后,发送确认,然后等待一段时间,才释放TCP连接;
  第十步:浏览器显示页面
  当浏览器还没有完全接受所有的 HTML 文档时,它就已经开始显示这个页面了。浏览器接收返回的数据包,根据浏览器的渲染机制渲染相应的数据。渲染数据后,进行相应的页面呈现和脚步交互。
  第11步:浏览器发送以获取嵌入HTML的其他内容
  比如一些样式文件、图片url、js文件url等,浏览器会通过这些url重新发送请求。请求过程仍然是类似于HTML读取、查询域名、发送请求、重定向等的过程,但是这些静态文件可以缓存在浏览器中,有时访问这些文件不需要经过服务器,但直接从缓存中获取。一些 网站 也使用第三方 CDN 来托管这些静态文件。 查看全部

  浏览器抓取网页(浏览器向主机发起一个HTTP-GET方法请求请求)
  浏览器向主机发起 HTTP-GET 方法消息请求。请求中收录访问的URL,即KeepAlive、长连接,以及User-Agent用户浏览器操作系统信息、编码等。
  第五步:有些服务会做永久重定向响应
  对于大型网站有多个宿主站点,负载均衡或者导入流量提高SEO排名,往往不是直接返回请求页面,而是重定向。返回的状态码不是200OK,而是301302以3开头的重定向码。浏览器得到重定向响应后,在响应消息的Location项中找到重定向地址,浏览器就可以在第一步重新访问。
  重定向的作用:重定向是负载均衡或导入流量,提高SEO排名。使用前端服务器接受请求,然后加载到不同的主机上,可以大大提高站点的并发处理能力;重定向还可以将多个域名的访问集中到一个站点;因为,它会被搜索引擎认为是两个网站,每个中的链接数都会减少,从而降低排名。永久重定向会将两个地址关联起来,搜索引擎会考虑相同的网站以提高排名。
  第 6 步:浏览器跟踪重定向地址
  浏览器知道重定向后的最终访问地址后,再次发送与上述内容相同的http请求。
  第七步:服务器处理请求
  服务器接收获取请求,然后对其进行处理并返回响应。
  第 8 步:服务器发出 HTML 响应
  返回状态码200 OK,表示服务器可以响应请求并返回消息。由于标题中的 Content-type 是“text/html”,浏览器将其呈现为 HTML,而不是下载文件。
  第九步:释放TCP连接
  浏览器所在的主机向服务器发送连接释放消息,然后停止发送数据;
  服务器收到释放消息后发送确认消息,然后将未完成的数据发送到服务器上;
  服务器数据传输完成后,向客户端发送连接释放消息;
  客户端收到消息后,发送确认,然后等待一段时间,才释放TCP连接;
  第十步:浏览器显示页面
  当浏览器还没有完全接受所有的 HTML 文档时,它就已经开始显示这个页面了。浏览器接收返回的数据包,根据浏览器的渲染机制渲染相应的数据。渲染数据后,进行相应的页面呈现和脚步交互。
  第11步:浏览器发送以获取嵌入HTML的其他内容
  比如一些样式文件、图片url、js文件url等,浏览器会通过这些url重新发送请求。请求过程仍然是类似于HTML读取、查询域名、发送请求、重定向等的过程,但是这些静态文件可以缓存在浏览器中,有时访问这些文件不需要经过服务器,但直接从缓存中获取。一些 网站 也使用第三方 CDN 来托管这些静态文件。

浏览器抓取网页(3.分析页码.py分析提取商品内容:利用PyQuery分析源码 )

网站优化优采云 发表了文章 • 0 个评论 • 102 次浏览 • 2021-10-22 05:01 • 来自相关话题

  浏览器抓取网页(3.分析页码.py分析提取商品内容:利用PyQuery分析源码
)
  1.搜索关键词:使用Selenium驱动浏览器获取产品列表。
  2.分析页码并翻页:获取产品页码,模拟翻页,获取后续页面的产品列表。
  3. 分析提取产品内容:使用PyQuery分析源码,分析产品列表。
  4.存入MongoDB:将产品列表信息存入数据库MongoDB。
  蜘蛛.py
   1 from selenium import webdriver
2 from selenium.common.exceptions import TimeoutException
3 from selenium.webdriver.common.by import By
4 from selenium.webdriver.support.ui import WebDriverWait
5 from selenium.webdriver.support import expected_conditions as EC
6 import re
7 from pyquery import PyQuery as pq
8 from urllib.parse import quote
9 import pymongo
10 from config import *
11
12 client = pymongo.MongoClient(MONGO_URL)
13 db = client[MONGO_DB]
14 browser = webdriver.Chrome()
15 wait = WebDriverWait(browser, 10)
16
17 def search():
18 try:
19 browser.get('https://www.taobao.com')
20 input = wait.until(
21 EC.presence_of_element_located((By.CSS_SELECTOR, '#q'))
22 )
23 submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))
24 input.send_keys('美食')
25 submit.click()
26 total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.total')))
27 get_products()
28 return total.text
29 except TimeoutEXception:
30 return search()
31
32 def next_page(page_number):
33 try:
34 input = wait.until(
35 EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input'))
36 )
37 submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))
38 input.clear()
39 input.send_keys(page_number)
40 submit.click()
41 wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page_number)))
42 get_products()
43 except TimeoutException:
44 next_page(page_number)
45
46 def get_products():
47 wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))
48 html = browser.page_source
49 doc = pq(html)
50 items = doc('#mainsrp-itemlist .items .item').items()
51 for item in items:
52 product = {
53 'image': item.find('.pic .img').attr('src'),
54 'price': item.find('.price').text(),
55 'deal': item.find('.deal-cnt').text()[:-3],
56 'title': item.find('.title').text(),
57 'shop': item.find('.shop').text(),
58 'location': item.find('.location').text()
59 }
60 print(product)
61 save_to_mongo(product)
62
63 def save_to_mongo(result):
64 try:
65 if db[MONGO_TABLE].insert(result):
66 print('保存MONGOBD成功',result)
67 except Exception:
68 print('存储到MONGODB失败',result)
69
70 def main():
71 total = search()
72 total = int(re.compile('(\d+)').search(total).group(1))
73 for i in range(2,total+1):
74 next_page(i)
75 browser.close()
76
77 if __name__ == '__main__':
78 main()
  配置文件
  1 MONGO_URL = 'localhost'
2 MONGO_DB = 'taobao'
3 MONGO_TABLE = 'products'
  从Chrome 59版本开始,开始支持Headless模式,即无界面模式,让浏览器在爬行时不会弹出。如果要使用此模式,请将 Chrome 升级至 59 及以上版本。开启 Headless 模式的方法如下:
  chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)
  首先创建一个ChromeOptions对象,然后添加headless参数,然后在初始化Chrome对象时通过chrome_options传递这个ChromeOptions对象,这样我们就可以成功开启Chrome的headless模式了。
  连接火狐浏览器非常简单,只需要做一个改动:
  browser = webdriver.Firefox()
  这里我们改变了浏览器对象的创建方式,这样抓取的时候会使用Firefox浏览器。
  如果不想使用Chrome的Headless模式,也可以使用PhantomJS(它是非界面浏览器)来抓取。爬取时不会弹窗,或者只需要修改WebDriver的语句:
  修改代码:
  client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB]
#browser = webdriver.Chrome()
browser = webdriver.PhantomJS(service_args=SERVICE_ARGS)
wait = WebDriverWait(browser, 10)
browser.set_window_size(1400, 900)
  此外,它还支持命令行配置。比如可以设置缓存和禁止图片加载功能,进一步提高抓取效率:
  MONGO_URL = 'localhost'
MONGO_DB = 'taobao'
MONGO_TABLE = 'products'
SERVICE_ARGS = ['--load-images=false', '--disk-cache=true'] 查看全部

  浏览器抓取网页(3.分析页码.py分析提取商品内容:利用PyQuery分析源码
)
  1.搜索关键词:使用Selenium驱动浏览器获取产品列表。
  2.分析页码并翻页:获取产品页码,模拟翻页,获取后续页面的产品列表。
  3. 分析提取产品内容:使用PyQuery分析源码,分析产品列表。
  4.存入MongoDB:将产品列表信息存入数据库MongoDB。
  蜘蛛.py
   1 from selenium import webdriver
2 from selenium.common.exceptions import TimeoutException
3 from selenium.webdriver.common.by import By
4 from selenium.webdriver.support.ui import WebDriverWait
5 from selenium.webdriver.support import expected_conditions as EC
6 import re
7 from pyquery import PyQuery as pq
8 from urllib.parse import quote
9 import pymongo
10 from config import *
11
12 client = pymongo.MongoClient(MONGO_URL)
13 db = client[MONGO_DB]
14 browser = webdriver.Chrome()
15 wait = WebDriverWait(browser, 10)
16
17 def search():
18 try:
19 browser.get('https://www.taobao.com')
20 input = wait.until(
21 EC.presence_of_element_located((By.CSS_SELECTOR, '#q'))
22 )
23 submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))
24 input.send_keys('美食')
25 submit.click()
26 total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.total')))
27 get_products()
28 return total.text
29 except TimeoutEXception:
30 return search()
31
32 def next_page(page_number):
33 try:
34 input = wait.until(
35 EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input'))
36 )
37 submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))
38 input.clear()
39 input.send_keys(page_number)
40 submit.click()
41 wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page_number)))
42 get_products()
43 except TimeoutException:
44 next_page(page_number)
45
46 def get_products():
47 wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))
48 html = browser.page_source
49 doc = pq(html)
50 items = doc('#mainsrp-itemlist .items .item').items()
51 for item in items:
52 product = {
53 'image': item.find('.pic .img').attr('src'),
54 'price': item.find('.price').text(),
55 'deal': item.find('.deal-cnt').text()[:-3],
56 'title': item.find('.title').text(),
57 'shop': item.find('.shop').text(),
58 'location': item.find('.location').text()
59 }
60 print(product)
61 save_to_mongo(product)
62
63 def save_to_mongo(result):
64 try:
65 if db[MONGO_TABLE].insert(result):
66 print('保存MONGOBD成功',result)
67 except Exception:
68 print('存储到MONGODB失败',result)
69
70 def main():
71 total = search()
72 total = int(re.compile('(\d+)').search(total).group(1))
73 for i in range(2,total+1):
74 next_page(i)
75 browser.close()
76
77 if __name__ == '__main__':
78 main()
  配置文件
  1 MONGO_URL = 'localhost'
2 MONGO_DB = 'taobao'
3 MONGO_TABLE = 'products'
  从Chrome 59版本开始,开始支持Headless模式,即无界面模式,让浏览器在爬行时不会弹出。如果要使用此模式,请将 Chrome 升级至 59 及以上版本。开启 Headless 模式的方法如下:
  chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)
  首先创建一个ChromeOptions对象,然后添加headless参数,然后在初始化Chrome对象时通过chrome_options传递这个ChromeOptions对象,这样我们就可以成功开启Chrome的headless模式了。
  连接火狐浏览器非常简单,只需要做一个改动:
  browser = webdriver.Firefox()
  这里我们改变了浏览器对象的创建方式,这样抓取的时候会使用Firefox浏览器。
  如果不想使用Chrome的Headless模式,也可以使用PhantomJS(它是非界面浏览器)来抓取。爬取时不会弹窗,或者只需要修改WebDriver的语句:
  修改代码:
  client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB]
#browser = webdriver.Chrome()
browser = webdriver.PhantomJS(service_args=SERVICE_ARGS)
wait = WebDriverWait(browser, 10)
browser.set_window_size(1400, 900)
  此外,它还支持命令行配置。比如可以设置缓存和禁止图片加载功能,进一步提高抓取效率:
  MONGO_URL = 'localhost'
MONGO_DB = 'taobao'
MONGO_TABLE = 'products'
SERVICE_ARGS = ['--load-images=false', '--disk-cache=true']

浏览器抓取网页(网页获取和解析速度和性能的应用场景详解! )

网站优化优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2021-10-22 03:17 • 来自相关话题

  浏览器抓取网页(网页获取和解析速度和性能的应用场景详解!
)
  (4)支持代理服务器
  (5) 支持自动cookies管理等。
  Java爬虫开发中应用最广泛的网页获取技术之一。它具有一流的速度和性能。它在功能支持方面相对较低。不支持JS脚本执行、CSS解析、渲染等准浏览器功能。推荐给需要快速获取网页的用户。无需解析脚本和 CSS 场景。
  示例代码如下:
  package cn.ysh.studio.crawler.httpclient;import org.apache.http.client.HttpClient;import org.apache.http.client.ResponseHandler;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.BasicResponseHandler;import org.apache.http.impl.client.DefaultHttpClient;/**
* 基于HtmlClient抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHttpClientTest{publicstaticvoid main(String[] args)throwsException{//目标页面String url ="http://www.yshjava.cn";//创建一个默认的HttpClientHttpClient httpclient =newDefaultHttpClient();try{//以get方式请求网页http://www.yshjava.cnHttpGet httpget =newHttpGet(url);//打印请求地址System.out.println("executing request "+ httpget.getURI());//创建响应处理器处理服务器响应内容ResponseHandlerresponseHandler=newBasicResponseHandler();//执行请求并获取结果String responseBody = httpclient.execute(httpget, responseHandler);System.out.println("----------------------------------------");System.out.println(responseBody);System.out.println("----------------------------------------");}finally{//关闭连接管理器
httpclient.getConnectionManager().shutdown();}}}
  汤
  jsoup 是一个 Java HTML 解析器,可以直接解析 URL 地址和 HTML 文本内容。它提供了一个非常省力的API,可以通过DOM、CSS和类似jQuery的操作方法来检索和操作数据。
  网页获取和分析速度非常快,推荐使用。
  主要功能如下:
  1. 从 URL、文件或字符串解析 HTML;
  2. 使用 DOM 或 CSS 选择器来查找和检索数据;
  3. 可操作的 HTML 元素、属性和文本;
  示例代码如下:
  package cn.ysh.studio.crawler.jsoup;import java.io.IOException;import org.jsoup.Jsoup;/**
* 基于Jsoup抓取网页内容
* @author www.yshjava.cn
*/publicclassJsoupTest{publicstaticvoid main(String[] args)throwsIOException{//目标页面String url ="http://www.yshjava.cn";//使用Jsoup连接目标页面,并执行请求,获取服务器响应内容String html =Jsoup.connect(url).execute().body();//打印页面内容System.out.println(html);}}
  单位
  htmlunit 是一个开源的java 页面分析工具。阅读完页面后,您可以有效地使用 htmlunit 来分析页面上的内容。该项目可以模拟浏览器操作,被称为java浏览器的开源实现。这个没有界面的浏览器也非常快。使用 Rhinojs 引擎。模拟js操作。
  网页获取和解析速度更快,性能更好。推荐用于需要解析网页脚本的应用场景。
  示例代码如下:
  package cn.ysh.studio.crawler.htmlunit;import com.gargoylesoftware.htmlunit.BrowserVersion;import com.gargoylesoftware.htmlunit.Page;import com.gargoylesoftware.htmlunit.WebClient;/**
* 基于HtmlUnit抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHtmlUnitSpider{publicstaticvoid main(String[] s)throwsException{//目标网页String url ="http://www.yshjava.cn";//模拟特定浏览器FIREFOX_3WebClient spider =newWebClient(BrowserVersion.FIREFOX_3);//获取目标网页Page page = spider.getPage(url);//打印网页内容System.out.println(page.getWebResponse().getContentAsString());//关闭所有窗口
spider.closeAllWindows();}}
  瓦蒂
  Watij(读作 wattage)是一种使用 Java 开发的 Web 应用程序测试工具。鉴于 Watij 的简单性和 Java 语言的强大功能,Watij 可以让您在真实浏览器中完成 Web 应用程序的自动化测试。因为调用了本地浏览器,所以支持CSS渲染和JS执行。
  网页抓取速度一般,IE版本过低(6/7)可能导致内存泄漏。
  示例代码如下:
  package cn.ysh.studio.crawler.ie;import watij.runtime.ie.IE;/**
* 基于Watij抓取网页内容,仅限Windows平台
*
* @author www.yshjava.cn
*/publicclassWatijTest{publicstaticvoid main(String[] s){//目标页面String url ="http://www.yshjava.cn";//实例化IE浏览器对象
IE ie =new IE();try{//启动浏览器
ie.start();//转到目标网页
ie.goTo(url);//等待网页加载就绪
ie.waitUntilReady();//打印页面内容System.out.println(ie.html());}catch(Exception e){
e.printStackTrace();}finally{try{//关闭IE浏览器
ie.close();}catch(Exception e){}}}}
  硒
  Selenium 也是 Web 应用程序测试的工具。Selenium 测试直接在浏览器中运行,就像真正的用户在操作一样。支持的浏览器包括 IE、Mozilla Firefox、Mozilla Suite 等。该工具的主要功能包括: 测试浏览器兼容性——测试您的应用程序是否可以在不同浏览器和操作系统上正常运行。测试系统功能——创建回归测试以验证软件功能和用户需求。支持自动录制动作和自动生成。测试Net、Java、Perl等不同语言的脚本。Selenium是ThoughtWorks专门为web应用编写的验收测试工具。
  网页抓取速度较慢,对于爬虫来说不是一个好的选择。
  示例代码如下:
  package cn.ysh.studio.crawler.selenium;import org.openqa.selenium.htmlunit.HtmlUnitDriver;/**
* 基于HtmlDriver抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHtmlDriverTest{publicstaticvoid main(String[] s){//目标网页String url ="http://www.yshjava.cn";HtmlUnitDriver driver =newHtmlUnitDriver();try{//禁用JS脚本功能
driver.setJavascriptEnabled(false);//打开目标网页
driver.get(url);//获取当前网页源码String html = driver.getPageSource();//打印网页源码System.out.println(html);}catch(Exception e){//打印堆栈信息
e.printStackTrace();}finally{try{//关闭并退出
driver.close();
driver.quit();}catch(Exception e){}}}}
  网络规范
  具有支持脚本执行和 CSS 渲染的接口的开源 Java 浏览器。速度是平均的。
  示例代码如下:
  package cn.ysh.studio.crawler.webspec;import org.watij.webspec.dsl.WebSpec;/**
* 基于WebSpec抓取网页内容
*
* @author www.yshjava.cn
*/publicclassWebspecTest{publicstaticvoid main(String[] s){//目标网页String url ="http://www.yshjava.cn";//实例化浏览器对象WebSpec spec =newWebSpec().mozilla();//隐藏浏览器窗体
spec.hide();//打开目标页面
spec.open(url);//打印网页源码System.out.println(spec.source());//关闭所有窗口
spec.closeAll();}} 查看全部

  浏览器抓取网页(网页获取和解析速度和性能的应用场景详解!
)
  (4)支持代理服务器
  (5) 支持自动cookies管理等。
  Java爬虫开发中应用最广泛的网页获取技术之一。它具有一流的速度和性能。它在功能支持方面相对较低。不支持JS脚本执行、CSS解析、渲染等准浏览器功能。推荐给需要快速获取网页的用户。无需解析脚本和 CSS 场景。
  示例代码如下:
  package cn.ysh.studio.crawler.httpclient;import org.apache.http.client.HttpClient;import org.apache.http.client.ResponseHandler;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.BasicResponseHandler;import org.apache.http.impl.client.DefaultHttpClient;/**
* 基于HtmlClient抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHttpClientTest{publicstaticvoid main(String[] args)throwsException{//目标页面String url ="http://www.yshjava.cn";//创建一个默认的HttpClientHttpClient httpclient =newDefaultHttpClient();try{//以get方式请求网页http://www.yshjava.cnHttpGet httpget =newHttpGet(url);//打印请求地址System.out.println("executing request "+ httpget.getURI());//创建响应处理器处理服务器响应内容ResponseHandlerresponseHandler=newBasicResponseHandler();//执行请求并获取结果String responseBody = httpclient.execute(httpget, responseHandler);System.out.println("----------------------------------------");System.out.println(responseBody);System.out.println("----------------------------------------");}finally{//关闭连接管理器
httpclient.getConnectionManager().shutdown();}}}
  汤
  jsoup 是一个 Java HTML 解析器,可以直接解析 URL 地址和 HTML 文本内容。它提供了一个非常省力的API,可以通过DOM、CSS和类似jQuery的操作方法来检索和操作数据。
  网页获取和分析速度非常快,推荐使用。
  主要功能如下:
  1. 从 URL、文件或字符串解析 HTML;
  2. 使用 DOM 或 CSS 选择器来查找和检索数据;
  3. 可操作的 HTML 元素、属性和文本;
  示例代码如下:
  package cn.ysh.studio.crawler.jsoup;import java.io.IOException;import org.jsoup.Jsoup;/**
* 基于Jsoup抓取网页内容
* @author www.yshjava.cn
*/publicclassJsoupTest{publicstaticvoid main(String[] args)throwsIOException{//目标页面String url ="http://www.yshjava.cn";//使用Jsoup连接目标页面,并执行请求,获取服务器响应内容String html =Jsoup.connect(url).execute().body();//打印页面内容System.out.println(html);}}
  单位
  htmlunit 是一个开源的java 页面分析工具。阅读完页面后,您可以有效地使用 htmlunit 来分析页面上的内容。该项目可以模拟浏览器操作,被称为java浏览器的开源实现。这个没有界面的浏览器也非常快。使用 Rhinojs 引擎。模拟js操作。
  网页获取和解析速度更快,性能更好。推荐用于需要解析网页脚本的应用场景。
  示例代码如下:
  package cn.ysh.studio.crawler.htmlunit;import com.gargoylesoftware.htmlunit.BrowserVersion;import com.gargoylesoftware.htmlunit.Page;import com.gargoylesoftware.htmlunit.WebClient;/**
* 基于HtmlUnit抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHtmlUnitSpider{publicstaticvoid main(String[] s)throwsException{//目标网页String url ="http://www.yshjava.cn";//模拟特定浏览器FIREFOX_3WebClient spider =newWebClient(BrowserVersion.FIREFOX_3);//获取目标网页Page page = spider.getPage(url);//打印网页内容System.out.println(page.getWebResponse().getContentAsString());//关闭所有窗口
spider.closeAllWindows();}}
  瓦蒂
  Watij(读作 wattage)是一种使用 Java 开发的 Web 应用程序测试工具。鉴于 Watij 的简单性和 Java 语言的强大功能,Watij 可以让您在真实浏览器中完成 Web 应用程序的自动化测试。因为调用了本地浏览器,所以支持CSS渲染和JS执行。
  网页抓取速度一般,IE版本过低(6/7)可能导致内存泄漏。
  示例代码如下:
  package cn.ysh.studio.crawler.ie;import watij.runtime.ie.IE;/**
* 基于Watij抓取网页内容,仅限Windows平台
*
* @author www.yshjava.cn
*/publicclassWatijTest{publicstaticvoid main(String[] s){//目标页面String url ="http://www.yshjava.cn";//实例化IE浏览器对象
IE ie =new IE();try{//启动浏览器
ie.start();//转到目标网页
ie.goTo(url);//等待网页加载就绪
ie.waitUntilReady();//打印页面内容System.out.println(ie.html());}catch(Exception e){
e.printStackTrace();}finally{try{//关闭IE浏览器
ie.close();}catch(Exception e){}}}}
  硒
  Selenium 也是 Web 应用程序测试的工具。Selenium 测试直接在浏览器中运行,就像真正的用户在操作一样。支持的浏览器包括 IE、Mozilla Firefox、Mozilla Suite 等。该工具的主要功能包括: 测试浏览器兼容性——测试您的应用程序是否可以在不同浏览器和操作系统上正常运行。测试系统功能——创建回归测试以验证软件功能和用户需求。支持自动录制动作和自动生成。测试Net、Java、Perl等不同语言的脚本。Selenium是ThoughtWorks专门为web应用编写的验收测试工具。
  网页抓取速度较慢,对于爬虫来说不是一个好的选择。
  示例代码如下:
  package cn.ysh.studio.crawler.selenium;import org.openqa.selenium.htmlunit.HtmlUnitDriver;/**
* 基于HtmlDriver抓取网页内容
*
* @author www.yshjava.cn
*/publicclassHtmlDriverTest{publicstaticvoid main(String[] s){//目标网页String url ="http://www.yshjava.cn";HtmlUnitDriver driver =newHtmlUnitDriver();try{//禁用JS脚本功能
driver.setJavascriptEnabled(false);//打开目标网页
driver.get(url);//获取当前网页源码String html = driver.getPageSource();//打印网页源码System.out.println(html);}catch(Exception e){//打印堆栈信息
e.printStackTrace();}finally{try{//关闭并退出
driver.close();
driver.quit();}catch(Exception e){}}}}
  网络规范
  具有支持脚本执行和 CSS 渲染的接口的开源 Java 浏览器。速度是平均的。
  示例代码如下:
  package cn.ysh.studio.crawler.webspec;import org.watij.webspec.dsl.WebSpec;/**
* 基于WebSpec抓取网页内容
*
* @author www.yshjava.cn
*/publicclassWebspecTest{publicstaticvoid main(String[] s){//目标网页String url ="http://www.yshjava.cn";//实例化浏览器对象WebSpec spec =newWebSpec().mozilla();//隐藏浏览器窗体
spec.hide();//打开目标页面
spec.open(url);//打印网页源码System.out.println(spec.source());//关闭所有窗口
spec.closeAll();}}

浏览器抓取网页(新浪微博中模拟抓取网页内容采集网页的内容说明(图))

网站优化优采云 发表了文章 • 0 个评论 • 190 次浏览 • 2021-10-19 11:13 • 来自相关话题

  浏览器抓取网页(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
  运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:明星用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1. txtMegry_Result_Best.py 这个文件用户整理了某天的用户微博信息,比如抓取2018年4月23日的客户端信息,但是评论是动态加载的,还在研究中 weibo_spider&lt; 查看全部

  浏览器抓取网页(新浪微博中模拟抓取网页内容采集网页的内容说明(图))
  运行程序,自动调用火狐浏览器登录微博。注:手机端信息更加精致简洁,动态加载没有限制。但是,如果微博或粉丝ID只显示20页,这是它的缺点;虽然客户端可能有动态加载,比如评论、微博,但是它的信息更完整。注:输入:明星用户id列表,使用URL用户id访问(这些id可以从用户的关注列表中获取) SinaWeibo_List_best_1.txt 输出:微博信息和用户基本信息 SinaWeibo_Info_best_1. txtMegry_Result_Best.py 这个文件用户整理了某天的用户微博信息,比如抓取2018年4月23日的客户端信息,但是评论是动态加载的,还在研究中 weibo_spider&lt;

浏览器抓取网页(浏览器会检查缓存中有没有这个域名对应的DNS解析结果)

网站优化优采云 发表了文章 • 0 个评论 • 86 次浏览 • 2021-10-19 10:16 • 来自相关话题

  浏览器抓取网页(浏览器会检查缓存中有没有这个域名对应的DNS解析结果)
  • 第一步,浏览器会检查缓存中是否有域名对应的解析IP地址。如果有,决议结束。浏览器中的缓存是有时间和空间限制的。 • 检查操作系统缓存中是否有与该域名对应的DNS 解析结果。在Windows系统中,域名可以通过C:\Windows\System32\drivers\etc\hosts文件解析为任意可访问的IP地址,浏览器会先使用这个地址。 Linux 中的配置文件是/etc/named.conf。缓存时间还受到域名过期时间和缓存空间大小的限制。 • 如果上述解析不完整,操作系统会将域名发送到LDNS(Local DNS Server),即区域内的域名服务器。至此,80%的请求都可以得到解决。 • 如果 LDNS 尚不可用,请直接到根服务器域名服务器请求解析。 • 根域名服务器将查询到的主域名服务器(gTDL 服务器)地址返回给本地域名服务器。 gTDL是.com、.cn等国际顶级域名服务器。 • 本地域名服务器然后向主域名服务器发送请求。 • 接受请求的主域名服务器查找并返回该域名对应的Name Server 域名服务器地址,即注册的域名服务器,例如域名提供商的服务器。 • Name Server查询存储的域名和IP映射关系表,获取IP和TTL值(TTL值控制返回时间) 查看全部

  浏览器抓取网页(浏览器会检查缓存中有没有这个域名对应的DNS解析结果)
  • 第一步,浏览器会检查缓存中是否有域名对应的解析IP地址。如果有,决议结束。浏览器中的缓存是有时间和空间限制的。 • 检查操作系统缓存中是否有与该域名对应的DNS 解析结果。在Windows系统中,域名可以通过C:\Windows\System32\drivers\etc\hosts文件解析为任意可访问的IP地址,浏览器会先使用这个地址。 Linux 中的配置文件是/etc/named.conf。缓存时间还受到域名过期时间和缓存空间大小的限制。 • 如果上述解析不完整,操作系统会将域名发送到LDNS(Local DNS Server),即区域内的域名服务器。至此,80%的请求都可以得到解决。 • 如果 LDNS 尚不可用,请直接到根服务器域名服务器请求解析。 • 根域名服务器将查询到的主域名服务器(gTDL 服务器)地址返回给本地域名服务器。 gTDL是.com、.cn等国际顶级域名服务器。 • 本地域名服务器然后向主域名服务器发送请求。 • 接受请求的主域名服务器查找并返回该域名对应的Name Server 域名服务器地址,即注册的域名服务器,例如域名提供商的服务器。 • Name Server查询存储的域名和IP映射关系表,获取IP和TTL值(TTL值控制返回时间)

浏览器抓取网页(浏览器抓取网页中的图片的工具:bigjpg2.js)

网站优化优采云 发表了文章 • 0 个评论 • 129 次浏览 • 2021-10-19 06:01 • 来自相关话题

  浏览器抓取网页(浏览器抓取网页中的图片的工具:bigjpg2.js)
  浏览器抓取网页中的图片的工具:bigjpg2.js//扩展包bigjpg2.js提供了多种图片抓取工具,用于给爬虫采集的图片一些定制化的规则,爬虫程序在输入网页网址和图片名称后可以获取每一张图片的大小、尺寸、分辨率等。varjpg=document.createelement('svg');jpg.appendchild("class");parsejson有些浏览器自带parsejson的插件,用户只需要在浏览器浏览任意网页,再通过parsejson工具生成请求链接,同时前端也可以在mock服务器中生成post数据即可,同时生成的response中可以包含jpg图片。
  fullstream如果你不想要一个jpg或者.jpg文件,也可以用fullstream来合并网页中的所有图片。fullstream可以将任意图片实例插入,例如jpg/.jpg。easyprintxmlxmlhttprequest.open(url,jsonurl)xmlhttprequest.get(url,jsonurl)xmlhttprequest.post(url,jsonurl)xmlhttprequest.put(url,jsonurl)xmlhttprequest.delete(url,jsonurl)xmlhttprequest.open_format(jsonurl,xmlurl)其中,jsonurl可以是任意网页地址,xmlurl可以是任意格式,如jpg图片,.jpg图片等等。
  xmlhttprequest=easyprint.extract("")xmlhttprequest=easyprint.extract("all/bigjpg2.jpg")xmlhttprequest=easyprint.extract("eagle.jpg")xmlhttprequest=easyprint.extract("jpeg.jpg")xmlhttprequest=easyprint.extract("gif.jpg")xmlhttprequest=easyprint.extract("cam.jpg")xmlhttprequest=easyprint.extract("img_3.jpg")xmlhttprequest=easyprint.extract("img_4.jpg")xmlhttprequest=easyprint.extract("img_5.jpg")xmlhttprequest=easyprint.extract("jpg_6.jpg")xmlhttprequest=easyprint.extract("cad.jpg")xmlhttprequest=easyprint.extract("cam3.jpg")xmlhttprequest=easyprint.extract("img_7.jpg")xmlhttprequest=easyprint.extract("img_8.jpg")xmlhttprequest=easyprint.extract("cad5.jpg")xmlhttprequest=easyprint.extract("cad7.jpg")xmlhttprequest=easyprint.extract("img_9.jpg")xmlhttprequest=easyprint.extract("jpg_jpg")xmlhttprequest=easyprint.extract("jpg.jpg")xmlhttprequest=easyprint.e。 查看全部

  浏览器抓取网页(浏览器抓取网页中的图片的工具:bigjpg2.js)
  浏览器抓取网页中的图片的工具:bigjpg2.js//扩展包bigjpg2.js提供了多种图片抓取工具,用于给爬虫采集的图片一些定制化的规则,爬虫程序在输入网页网址和图片名称后可以获取每一张图片的大小、尺寸、分辨率等。varjpg=document.createelement('svg');jpg.appendchild("class");parsejson有些浏览器自带parsejson的插件,用户只需要在浏览器浏览任意网页,再通过parsejson工具生成请求链接,同时前端也可以在mock服务器中生成post数据即可,同时生成的response中可以包含jpg图片。
  fullstream如果你不想要一个jpg或者.jpg文件,也可以用fullstream来合并网页中的所有图片。fullstream可以将任意图片实例插入,例如jpg/.jpg。easyprintxmlxmlhttprequest.open(url,jsonurl)xmlhttprequest.get(url,jsonurl)xmlhttprequest.post(url,jsonurl)xmlhttprequest.put(url,jsonurl)xmlhttprequest.delete(url,jsonurl)xmlhttprequest.open_format(jsonurl,xmlurl)其中,jsonurl可以是任意网页地址,xmlurl可以是任意格式,如jpg图片,.jpg图片等等。
  xmlhttprequest=easyprint.extract("")xmlhttprequest=easyprint.extract("all/bigjpg2.jpg")xmlhttprequest=easyprint.extract("eagle.jpg")xmlhttprequest=easyprint.extract("jpeg.jpg")xmlhttprequest=easyprint.extract("gif.jpg")xmlhttprequest=easyprint.extract("cam.jpg")xmlhttprequest=easyprint.extract("img_3.jpg")xmlhttprequest=easyprint.extract("img_4.jpg")xmlhttprequest=easyprint.extract("img_5.jpg")xmlhttprequest=easyprint.extract("jpg_6.jpg")xmlhttprequest=easyprint.extract("cad.jpg")xmlhttprequest=easyprint.extract("cam3.jpg")xmlhttprequest=easyprint.extract("img_7.jpg")xmlhttprequest=easyprint.extract("img_8.jpg")xmlhttprequest=easyprint.extract("cad5.jpg")xmlhttprequest=easyprint.extract("cad7.jpg")xmlhttprequest=easyprint.extract("img_9.jpg")xmlhttprequest=easyprint.extract("jpg_jpg")xmlhttprequest=easyprint.extract("jpg.jpg")xmlhttprequest=easyprint.e。

浏览器抓取网页(如何在优采云采集器里面登录网页?到的抓取工具)

网站优化优采云 发表了文章 • 0 个评论 • 133 次浏览 • 2021-10-17 14:04 • 来自相关话题

  浏览器抓取网页(如何在优采云采集器里面登录网页?到的抓取工具)
  登录网页数据抓取采集 在网页数据抓取过程中,我们会发现有些网页需要权限才能查看全部内容。这种网站必须登录才能看到内容。比如论坛采集的内容,或者采集的招聘信息中的电话号码等等,大家应该都遇到过这种情况,所以需要登录采集@网页数据被捕获。&gt; 下面就这个问题和大家分享一下我的经验——如何实现登录采集功能。使用的爬虫工具是最常用的优采云采集器 V9,它的实现原理是:我们只需要登录账号手动查看权限,然后优采云采集器也是一样,只要让采集器登录就可以看到这个网站 隐藏信息。优采云采集器如何登录网页?优采云采集器使用内置浏览器登录采集,数据发布有时需要登录,除了浏览器登录,还有另外一种登录方式,在此说明。 采集登录:第一步是找到登录界面。第二步,按照下图的说明登录你要采集的网站,使用浏览器获取网页登录信息。这里,Cookie是指用户的登录信息,Useragent是客户端或浏览器的标识。通过以上2步,优采云采集器已经成功登录网站,效果如上图所示。操作还是比较简单的,大家可以通过这个操作轻松完成登录采集!需要注意的是,这里只能处理登录时可见的内容,没有办法处理只有回复时才可见的内容。 查看全部

  浏览器抓取网页(如何在优采云采集器里面登录网页?到的抓取工具)
  登录网页数据抓取采集 在网页数据抓取过程中,我们会发现有些网页需要权限才能查看全部内容。这种网站必须登录才能看到内容。比如论坛采集的内容,或者采集的招聘信息中的电话号码等等,大家应该都遇到过这种情况,所以需要登录采集@网页数据被捕获。&gt; 下面就这个问题和大家分享一下我的经验——如何实现登录采集功能。使用的爬虫工具是最常用的优采云采集器 V9,它的实现原理是:我们只需要登录账号手动查看权限,然后优采云采集器也是一样,只要让采集器登录就可以看到这个网站 隐藏信息。优采云采集器如何登录网页?优采云采集器使用内置浏览器登录采集,数据发布有时需要登录,除了浏览器登录,还有另外一种登录方式,在此说明。 采集登录:第一步是找到登录界面。第二步,按照下图的说明登录你要采集的网站,使用浏览器获取网页登录信息。这里,Cookie是指用户的登录信息,Useragent是客户端或浏览器的标识。通过以上2步,优采云采集器已经成功登录网站,效果如上图所示。操作还是比较简单的,大家可以通过这个操作轻松完成登录采集!需要注意的是,这里只能处理登录时可见的内容,没有办法处理只有回复时才可见的内容。

官方客服QQ群

微信人工客服

QQ人工客服


线