动态网页抓取

动态网页抓取

动态网页抓取(一个程序定时读取这个页面的内容怎么办?|编程问答 )

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

  动态网页抓取(一个程序定时读取这个页面的内容怎么办?|编程问答
)
  如何捕获动态web内容?请询问:有一个信息系统需要用户名和密码才能输入。输入超链接“:8080/MIS/show.JSP?Id=1000”后,将显示一个统计表
  现在我想写一个程序来定期阅读这个页面的内容。怎么做。现在我被困在进入系统的地方
  如果未通过授权验证,请键入:8080/MIS/show。JSP?地址栏中Id=1000,内容为错误信息
  注意:我不能更改权限认证------------------编程问答------------------注意------------------编程问答------------------使用httpclient,它可以填写表单------------------编程问答------------------用JS编写计时器,然后定期访问此链接-----------------编程问答-----------------编程问答--------------------
  
  --------------------编程问答------------------我需要先用用户名和密码登录,然后填写表格。httpclient能做到吗------------------编程问答------------------当然,坦率地说,表单不仅仅是一个HTTP请求-----------------编程问答-----------------你可以通过每天回复获得10个可用点-----------------编程问答-----------------聚焦-----------------编程问答------------------------------------------眩晕,我也遇到了这个问题-----------------编程问答-----------------我也有这个问题。一位大侠也告诉我使用httpclient。我还没有检查它的使用情况,估计可用性------------------编程问答------------------我的问题是如何获取JS脚本的动态输出内容------------------编程问答------------------importjava.io.bufferedinputstream;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.StringReader;。HttpURLConnection;。网址;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importorg.w3c.dom.Document;importorg.xml.sax.InputSource;publicclassTest{publicstaticvoidmain(String[]args)throwException{Stringuri=“”;Stringencoding=“gb2312”;URLurl=newURL(uri);System.getProperties().setProperty(“http.proxyHost”,”172. 28. 88.2”);System.getProperties().setProperty(“http.proxyPort”,“80”);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.connect();InputStreamin=newBufferedInputStream(conn.getInputStream());InputStreamReaderisr=newInputStreamReader(in,编码);intstr=-1;StringBuffersb=newStringBuffer();while((str=isr.read())!=-1)sb.append((char)str);DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderdb=dbf.newDocumentBuilder();isr.close();Documentdoc=db.parse(newinputsource(newstringreader(sb.Tostring());//这将生成一个doc类型}
  根据自己的格式。------------编程问答-----------------学习-----------------编程问答-----------------关注下的学习
  补充:Java , Java SE 查看全部

  动态网页抓取(一个程序定时读取这个页面的内容怎么办?|编程问答
)
  如何捕获动态web内容?请询问:有一个信息系统需要用户名和密码才能输入。输入超链接“:8080/MIS/show.JSP?Id=1000”后,将显示一个统计表
  现在我想写一个程序来定期阅读这个页面的内容。怎么做。现在我被困在进入系统的地方
  如果未通过授权验证,请键入:8080/MIS/show。JSP?地址栏中Id=1000,内容为错误信息
  注意:我不能更改权限认证------------------编程问答------------------注意------------------编程问答------------------使用httpclient,它可以填写表单------------------编程问答------------------用JS编写计时器,然后定期访问此链接-----------------编程问答-----------------编程问答--------------------
  
  --------------------编程问答------------------我需要先用用户名和密码登录,然后填写表格。httpclient能做到吗------------------编程问答------------------当然,坦率地说,表单不仅仅是一个HTTP请求-----------------编程问答-----------------你可以通过每天回复获得10个可用点-----------------编程问答-----------------聚焦-----------------编程问答------------------------------------------眩晕,我也遇到了这个问题-----------------编程问答-----------------我也有这个问题。一位大侠也告诉我使用httpclient。我还没有检查它的使用情况,估计可用性------------------编程问答------------------我的问题是如何获取JS脚本的动态输出内容------------------编程问答------------------importjava.io.bufferedinputstream;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.StringReader;。HttpURLConnection;。网址;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importorg.w3c.dom.Document;importorg.xml.sax.InputSource;publicclassTest{publicstaticvoidmain(String[]args)throwException{Stringuri=“”;Stringencoding=“gb2312”;URLurl=newURL(uri);System.getProperties().setProperty(“http.proxyHost”,”172. 28. 88.2”);System.getProperties().setProperty(“http.proxyPort”,“80”);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.connect();InputStreamin=newBufferedInputStream(conn.getInputStream());InputStreamReaderisr=newInputStreamReader(in,编码);intstr=-1;StringBuffersb=newStringBuffer();while((str=isr.read())!=-1)sb.append((char)str);DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderdb=dbf.newDocumentBuilder();isr.close();Documentdoc=db.parse(newinputsource(newstringreader(sb.Tostring());//这将生成一个doc类型}
  根据自己的格式。------------编程问答-----------------学习-----------------编程问答-----------------关注下的学习
  补充:Java , Java SE

动态网页抓取(Python中使用CSV库来写入数据行的方法及获取文本)

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

  动态网页抓取(Python中使用CSV库来写入数据行的方法及获取文本)
  好的,因为我试着回答你的其他问题,虽然你没有完全解释你想要什么,我会继续。
  要记住的一件事是,Selenium 正在运行您的浏览器,而不是传统的网络爬虫。这意味着,如果 url 更改不是什么大问题,那么必须更改的唯一方法是在弹出窗口出现时更改 Selenium 获取的方式。
  您可以通过其他代码做的一件事是寻找航班
  driver.implicitly_wait(40)//40 is the amount of seconds
  这将等待至少 40 秒,然后崩溃,然后在页面加载或您接下来想要在 dom 中执行的任何操作时启动。
  现在,如果你想抓取所有出现的飞行数据,这将是非常棘手的。您可以执行 for 循环并抓取页面上的每个元素,然后将其写入 csv 文件。
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
for flights in class_for_departure_flight:
try:
with open('my_flights.csv', 'a', newline='') as flights_book:
csv_writer = csv.writer(flights_book, delimiter = ',')
csv_writer.writerow(flights.text)
except:
print("Missed a flight")
  在第二部分需要注意的是,我在 Python 中使用 CSV 库来写入数据行。注意可以把一堆数据追加在一起,写成一行,如下图:
  data = (flights, dates, times)
csv_writer.writerow(data)
  它将正确处理电子表格中同一行上的所有这些不同内容。
  另外两个容易错过的大事是:
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
  这是driver.find_元素_by_xpath,你会注意到元素是复数,这意味着它正在寻找多个具有相同class_name的对象并将它们存储在一个数组中,以便你可以在for循环迭代中匹配它们。
  下一部分是 csv_writer.writerow(flights.text)。当您迭代机票时,您需要获取文本以执行此操作,您可以执行 flight.text。如果这可以仅使用搜索功能来完成,那么您也可以执行类似的操作。
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]').text
  希望这会有所帮助! 查看全部

  动态网页抓取(Python中使用CSV库来写入数据行的方法及获取文本)
  好的,因为我试着回答你的其他问题,虽然你没有完全解释你想要什么,我会继续。
  要记住的一件事是,Selenium 正在运行您的浏览器,而不是传统的网络爬虫。这意味着,如果 url 更改不是什么大问题,那么必须更改的唯一方法是在弹出窗口出现时更改 Selenium 获取的方式。
  您可以通过其他代码做的一件事是寻找航班
  driver.implicitly_wait(40)//40 is the amount of seconds
  这将等待至少 40 秒,然后崩溃,然后在页面加载或您接下来想要在 dom 中执行的任何操作时启动。
  现在,如果你想抓取所有出现的飞行数据,这将是非常棘手的。您可以执行 for 循环并抓取页面上的每个元素,然后将其写入 csv 文件。
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
for flights in class_for_departure_flight:
try:
with open('my_flights.csv', 'a', newline='') as flights_book:
csv_writer = csv.writer(flights_book, delimiter = ',')
csv_writer.writerow(flights.text)
except:
print("Missed a flight")
  在第二部分需要注意的是,我在 Python 中使用 CSV 库来写入数据行。注意可以把一堆数据追加在一起,写成一行,如下图:
  data = (flights, dates, times)
csv_writer.writerow(data)
  它将正确处理电子表格中同一行上的所有这些不同内容。
  另外两个容易错过的大事是:
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
  这是driver.find_元素_by_xpath,你会注意到元素是复数,这意味着它正在寻找多个具有相同class_name的对象并将它们存储在一个数组中,以便你可以在for循环迭代中匹配它们。
  下一部分是 csv_writer.writerow(flights.text)。当您迭代机票时,您需要获取文本以执行此操作,您可以执行 flight.text。如果这可以仅使用搜索功能来完成,那么您也可以执行类似的操作。
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]').text
  希望这会有所帮助!

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

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

  动态网页抓取(网页获取和解析速度和性能的应用场景详解!)
  (4)support 代理服务器
  (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
  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
  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)support 代理服务器
  (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
  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
  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 个评论 • 93 次浏览 • 2021-09-12 13:01 • 来自相关话题

  动态网页抓取(服务器目录文章目录动态网页和静态网页的区别(一))
  00.目录
  文章directory
  动态网页和静态网页的区别,首先要分别理解两个概念,什么是静态网页,什么是动态网页,学会区分静态和动态。
  01.静态网页
  (1)Static 网页不能简单理解为静态网页,它主要是指没有程序代码,只有HTML(即:超文本标记语言)的网页,通常以.html、.htm或.xml为后缀等等。虽然静态网页的内容一旦创建就不会改变,但是静态网页也收录了一些活跃的部分,主要是一些GIF动画和其他html
  (2)打开静态网页,用户可以直接双击,任何人随时打开的页面内容都是一样的。数据库
  02.动态网页
  (1)动态网页是指一种网页编程技术,相对于静态网页。动态网页的网页文件除了HTML标签外,还收录一些特定功能的程序代码。这些代码可以使浏览器并且服务器可以交互,因此服务器根据客户的不同请求动态生成网页内容。编程
  即:与静态网页相比,动态网页具有相同的页面代码,但显示的内容会随着时间、环境或数据库操作的结果而变化。浏览器
  (2)动态网页与网页上的各种动画、滚动字幕等视觉动态效果没有直接关系。动态网页也可以是纯文本内容或收录各种动画内容。这些只是具体的表现形式网页的内容,不管网页有没有动态效果,只要是动态网站技术(如PHP、ASP、JSP等)生成的网页,都可以称为动态网页. 服务器
  03.动态网页和静态网页的区别
  (1)更新维护:ide
  一旦静态网页内容发布到网站服务器上,这些网页的内容就存储在网站服务器上,无论是否有用户访问。如果要修改网页的内容,必须修改其源代码,然后重新上传到服务器。静态网页没有数据库支持。当网站信息量大时,网页制作和维护难度大。动画
  动态网页可以根据用户的不同请求、时间或环境需求动态生成不同的网页内容,动态网页通常基于数据库技术,可以大大减少网站maintenance work网站
  (2)Interactivity: 搜索引擎
  由于静态网页的很多内容是固定的,在功能上有很大的局限性,所以交互性较差。 xml
  动态网页可以实现更多功能,如用户登录、注册、查询等
  (3)响应速度:
  静态网页内容比较固定,容易被搜索引擎检索到,不需要链接数据库,所以响应速度更快
  动态网页实际上并不是独立存在于服务器上的网页文件。服务器只有在用户请求时才返回一个完整的网页,涉及到数据链访问、查询等一系列过程,所以响应速度比较慢
  (4)访问功能:
  静态网页的每个网页都有一个固定的网址,网页网址后缀为.htm、.html、.shtml等常见形式,不收录“?”,可以直接双击打开点击
  “?”在动态网页中搜索引擎检索存在一定的问题。搜索引擎通常无法访问网站数据库中的所有网页,或者出于技术考虑,搜索将不会被抓到“?”之后的内容。在网址中,不能直接双击打开
  04.总结
  如果网页的内容比较简单,不需要频繁修改,或者只是为了展示信息,使用静态网页,操作简单,不需要数据库管理。
  如果网页的内容比较复杂,功能多,变化频繁,内容比较实时,就使用动态网页 查看全部

  动态网页抓取(服务器目录文章目录动态网页和静态网页的区别(一))
  00.目录
  文章directory
  动态网页和静态网页的区别,首先要分别理解两个概念,什么是静态网页,什么是动态网页,学会区分静态和动态。
  01.静态网页
  (1)Static 网页不能简单理解为静态网页,它主要是指没有程序代码,只有HTML(即:超文本标记语言)的网页,通常以.html、.htm或.xml为后缀等等。虽然静态网页的内容一旦创建就不会改变,但是静态网页也收录了一些活跃的部分,主要是一些GIF动画和其他html
  (2)打开静态网页,用户可以直接双击,任何人随时打开的页面内容都是一样的。数据库
  02.动态网页
  (1)动态网页是指一种网页编程技术,相对于静态网页。动态网页的网页文件除了HTML标签外,还收录一些特定功能的程序代码。这些代码可以使浏览器并且服务器可以交互,因此服务器根据客户的不同请求动态生成网页内容。编程
  即:与静态网页相比,动态网页具有相同的页面代码,但显示的内容会随着时间、环境或数据库操作的结果而变化。浏览器
  (2)动态网页与网页上的各种动画、滚动字幕等视觉动态效果没有直接关系。动态网页也可以是纯文本内容或收录各种动画内容。这些只是具体的表现形式网页的内容,不管网页有没有动态效果,只要是动态网站技术(如PHP、ASP、JSP等)生成的网页,都可以称为动态网页. 服务器
  03.动态网页和静态网页的区别
  (1)更新维护:ide
  一旦静态网页内容发布到网站服务器上,这些网页的内容就存储在网站服务器上,无论是否有用户访问。如果要修改网页的内容,必须修改其源代码,然后重新上传到服务器。静态网页没有数据库支持。当网站信息量大时,网页制作和维护难度大。动画
  动态网页可以根据用户的不同请求、时间或环境需求动态生成不同的网页内容,动态网页通常基于数据库技术,可以大大减少网站maintenance work网站
  (2)Interactivity: 搜索引擎
  由于静态网页的很多内容是固定的,在功能上有很大的局限性,所以交互性较差。 xml
  动态网页可以实现更多功能,如用户登录、注册、查询等
  (3)响应速度:
  静态网页内容比较固定,容易被搜索引擎检索到,不需要链接数据库,所以响应速度更快
  动态网页实际上并不是独立存在于服务器上的网页文件。服务器只有在用户请求时才返回一个完整的网页,涉及到数据链访问、查询等一系列过程,所以响应速度比较慢
  (4)访问功能:
  静态网页的每个网页都有一个固定的网址,网页网址后缀为.htm、.html、.shtml等常见形式,不收录“?”,可以直接双击打开点击
  “?”在动态网页中搜索引擎检索存在一定的问题。搜索引擎通常无法访问网站数据库中的所有网页,或者出于技术考虑,搜索将不会被抓到“?”之后的内容。在网址中,不能直接双击打开
  04.总结
  如果网页的内容比较简单,不需要频繁修改,或者只是为了展示信息,使用静态网页,操作简单,不需要数据库管理。
  如果网页的内容比较复杂,功能多,变化频繁,内容比较实时,就使用动态网页

动态网页抓取( 微信朋友圈的数据入口搞定了,获取外链。(图))

网站优化优采云 发表了文章 • 0 个评论 • 191 次浏览 • 2021-09-12 00:08 • 来自相关话题

  动态网页抓取(
微信朋友圈的数据入口搞定了,获取外链。(图))
  
  2、之后,在首页点击【创建图书】-->【微信相册】。
  
  3、点击【开始制作】-->【添加随机指定的图书编辑为好友】,长按二维码即可添加好友。
  4、 耐心等待微信的后续制作。完成后,您将收到编辑器的消息提醒,如下图所示。
  至此,我们已经完成了微信朋友圈的数据录入,并获得了外链。
  确保朋友圈设置为【全开】,默认全开,不知道怎么设置的请自行百度。
  
  5、点击外部链接,然后进入网页,需要使用微信扫码授权登录。
  6、扫码授权,即可进入网页版微信,如下图。
  
  7、 然后我们就可以写一个爬虫程序正常抓取信息了。这里,编辑器使用Scrapy爬虫框架,Python使用版本3,集成开发环境使用Pycharm。下图为微信首页,图片由编辑定制。
  
  二、创建爬虫项目
  1、 确保您的计算机上安装了 Scrapy。然后选择一个文件夹,在该文件夹下输入命令行,输入执行命令:
  scrapy startproject weixin_moment
  ,等待Scrapy爬虫项目生成。
  2、在命令行输入cd weixin_moment,进入创建好的weixin_moment目录。然后输入命令:
  scrapy genspider 'moment' 'chushu.la'
  ,创建朋友圈爬虫,如下图。
  
  3、执行以上两步后的文件夹结构如下:
  
  三、分析网页数据
  1、进入微信首页,按F12,建议使用谷歌浏览器,查看元素,点击“网络”标签,然后勾选“保存日志”,即保存日志,如下图所示。可以看到首页的请求方法是get,返回的状态码是200,表示请求成功。
  
  2、点击“Response”(服务器响应),可以看到系统返回的数据是JSON格式的。说明我们需要在程序中处理JSON格式的数据。
  
  3、点击微信本的“导航”窗口,可以看到数据按月加载。当导航按钮被点击时,它会加载相应月份的 Moments 数据。
  
  4、点击[2014/04]月,然后查看服务器响应数据,可以看到页面显示的数据与服务器响应对应。
  
  5、查看请求方法,可以看到此时的请求方法已经变成了POST。细心的小伙伴可以看到,点击“下个月”或其他导航月份时,首页的网址没有变化,说明该网页是动态加载的。对比多个网页请求后,我们可以看到“Request Payload”下的数据包参数在不断变化,如下图所示。
  
  6、展开服务器响应数据,将数据放入JSON在线解析器中,如下图:
  
  可以看到朋友圈的数据存放在paras /data节点下。
  至此,网页分析和数据来源已确定。接下来,我将编写一个程序来捕获数据。请期待下一篇文章~~ 查看全部

  动态网页抓取(
微信朋友圈的数据入口搞定了,获取外链。(图))
  
  2、之后,在首页点击【创建图书】-->【微信相册】。
  
  3、点击【开始制作】-->【添加随机指定的图书编辑为好友】,长按二维码即可添加好友。
  4、 耐心等待微信的后续制作。完成后,您将收到编辑器的消息提醒,如下图所示。
  至此,我们已经完成了微信朋友圈的数据录入,并获得了外链。
  确保朋友圈设置为【全开】,默认全开,不知道怎么设置的请自行百度。
  
  5、点击外部链接,然后进入网页,需要使用微信扫码授权登录。
  6、扫码授权,即可进入网页版微信,如下图。
  
  7、 然后我们就可以写一个爬虫程序正常抓取信息了。这里,编辑器使用Scrapy爬虫框架,Python使用版本3,集成开发环境使用Pycharm。下图为微信首页,图片由编辑定制。
  
  二、创建爬虫项目
  1、 确保您的计算机上安装了 Scrapy。然后选择一个文件夹,在该文件夹下输入命令行,输入执行命令:
  scrapy startproject weixin_moment
  ,等待Scrapy爬虫项目生成。
  2、在命令行输入cd weixin_moment,进入创建好的weixin_moment目录。然后输入命令:
  scrapy genspider 'moment' 'chushu.la'
  ,创建朋友圈爬虫,如下图。
  
  3、执行以上两步后的文件夹结构如下:
  
  三、分析网页数据
  1、进入微信首页,按F12,建议使用谷歌浏览器,查看元素,点击“网络”标签,然后勾选“保存日志”,即保存日志,如下图所示。可以看到首页的请求方法是get,返回的状态码是200,表示请求成功。
  
  2、点击“Response”(服务器响应),可以看到系统返回的数据是JSON格式的。说明我们需要在程序中处理JSON格式的数据。
  
  3、点击微信本的“导航”窗口,可以看到数据按月加载。当导航按钮被点击时,它会加载相应月份的 Moments 数据。
  
  4、点击[2014/04]月,然后查看服务器响应数据,可以看到页面显示的数据与服务器响应对应。
  
  5、查看请求方法,可以看到此时的请求方法已经变成了POST。细心的小伙伴可以看到,点击“下个月”或其他导航月份时,首页的网址没有变化,说明该网页是动态加载的。对比多个网页请求后,我们可以看到“Request Payload”下的数据包参数在不断变化,如下图所示。
  
  6、展开服务器响应数据,将数据放入JSON在线解析器中,如下图:
  
  可以看到朋友圈的数据存放在paras /data节点下。
  至此,网页分析和数据来源已确定。接下来,我将编写一个程序来捕获数据。请期待下一篇文章~~

动态网页抓取( Web抓取是从网站中提取数据的过程简单介绍!)

网站优化优采云 发表了文章 • 0 个评论 • 146 次浏览 • 2021-09-12 00:08 • 来自相关话题

  动态网页抓取(
Web抓取是从网站中提取数据的过程简单介绍!)
  
  您在日常生活中通常做什么?阅读新闻、发送电子邮件、查找最具成本效益的产品或在线搜索工作?如您所知,大多数这些任务都可以通过网络爬虫自动完成。不需要花几个小时浏览网站,有电脑的话几分钟就能搞定。
  网页抓取是从网站中提取数据的过程。学习网页抓取就像学习 Beautiful Soup、Selenium 或 Scrapy 等库如何在 Python 中工作一样简单。但是,如果你不能将所有学到的概念付诸实践,那就是浪费时间。
  尝试网页抓取项目不仅可以帮助您学习网页抓取理论,还可以帮助您开发机器人、自动执行日常任务,并让您有动力学习这项新技能。在这篇文章中,我列出了一些可以自动化大多数人每天遇到的任务的项目。项目按难度列出,初级项目在开头,高级项目在文章末尾。
  一、自动化重复性任务
  为了使第一个项目对初学者友好,我们将使用 Beautiful Soup,因为它是最简单的用于网页抓取的 Python 库。
  这个项目的目标是从任何网站(例如news文章、post等)文章获取标题和主要段落。之后,将所有内容导出到 .txt 文件中,该文件应命名为文章 并带有标题。该项目的演示可以在下面的 gif 中找到。在这种情况下,我没有爬取一条新闻文章,而是爬取了电影“泰坦尼克号”的文本。第一个项目的代码可以在我的 Github 上找到。
  
  这个初学者项目将帮助我们熟悉 Python 中网页抓取的核心概念,例如如何从网站 获取 HTML、在网站 中查找元素以及将数据导出到 .txt 文件。
  当然,您可以手动复制粘贴数据,然后在不到一分钟的时间内创建一个 .txt 文件;然而,现在想象一下这样做十个或更多文章!手动完成需要很多时间,但是使用 Python 和 Beautiful Soup,我们可以创建一个脚本来提取这些数据,然后添加一个 for 循环来在几分钟内抓取多个页面。
  下面列出了一些其他重复性任务,您可以通过网络抓取来自动执行这些任务。请记住,您需要具备 Selenium 的基本知识才能自动执行这些操作(查看本指南以从头开始学习 Selenium)
  一个。发送邮件
  B.在社交媒体上发帖
  c.点菜
  二、获取足球数据:自动运动分析
  如果你喜欢运动,每场比赛结束后,你可以访问网站,它会提供诸如最终得分和球员表现等免费统计数据。在每次新游戏后获取这些数据是不是很酷?或者更好地想象能够使用这些数据来创建报告,以找到有关您最喜欢的球队或联赛的有趣见解。
  这是第二个项目的目标——获取收录您最喜欢的体育统计数据的网站。大多数情况下,这种类型的数据是在一个表中,所以一定要以CSV格式导出数据,以便您以后可以使用Pandas库读取数据并找到见解。为了更好地理解这个项目,请查看下面的 gif。在那个演示中,我提取了过去 3 年多场足球联赛的比分。
  
  大多数有锻炼数据的网站都使用 JavaScript 来动态更新数据。这意味着我们不能在这个项目中使用 Beautiful Soup 库。相反,我们将使用 Selenium 单击按钮,选择下拉列表中的元素,然后提取所需的数据。
  你可以在我的 Github 上找到这个项目的代码。您可以通过寻找在游戏中得分更高的团队来使该项目更具挑战性。有了这个,您可以创建一个报告,告诉您具有高得分趋势的匹配项。这将帮助您在分析足球比赛时做出更好的决定。在此链接上,您可以找到有关如何完成项目最后一部分的指南。
  三、Grab 求职门户:自动化求职
  通过抓取网络可以减少找工作的难度。诸如在多个页面中搜索新工作、检查特定工作要求和薪资范围等,如果您手动进行,可能需要大约 20 分钟。幸运的是,所有这一切都可以通过几行代码自动完成。
  在这个项目中,你应该创建一个机器人,它会抓取一个工作门户来获取特定工作的要求和薪水。您可以在本项目中使用 Beautiful Soup 或 Selenium,但方法会因您使用的库而异。
  如果您使用 Beautiful Soup,请只关注收录您要抓取的最终数据的页面。您可以按照此视频教程来帮助您开始此项目。
  话虽如此,我建议您使用Selenium,因为您可以在网站 上自由执行更多操作。最棒的是你可以在每次操作后运行代码,并在浏览器中查看机器人执行的步骤。要使用 Selenium 解决此问题,请考虑从您最喜欢的工作门户获取数据通常会遵循的所有步骤。
  例如,访问网站,写下职位名称,单击搜索按钮,然后浏览每个职位发布以提取任何相关信息。之后,使用 Selenium 库在 Python 中复制这些步骤。
  四、Grab 商品价格:获得最优惠的价格
  如果您想为特定商品找到最优惠的价格,购物可能会变得非常耗时。在网站 上找到汽车、电视和衣服的最优惠价格可能需要几个小时;幸运的是,您需要几分钟时间才能完成我们的下一个网络抓取项目。
  这是本文列出的最高级的项目,分为两部分。首先,去你最喜欢的网上商店,采集产品名称、价格、折扣和链接等数据,以便你以后可以找到它们。我建议你在这个项目中使用 Scrapy 库,如果你打算爬很多页面,因为它是 Python 中最快的网络爬行库。您可以按照本教程来帮助您开始这个项目。
  对于项目的第二部分,您必须跟踪提取的价格,以便在特定产品的价格大幅下降时收到通知。
  请记住,您可以将最终项目的想法应用到您感兴趣的其他领域。举几个例子。
  一个。抓住股价
  B.把握投注赔率
  c.获取加密货币价格
  例如,我不是抓取产品价格,而是抓取投注赔率。想法是一样的,在多个博彩公司中找到最佳赔率。然后在赔率增加时收到通知。
  原文:
  云管理服务专家新钛云服务张纯译 查看全部

  动态网页抓取(
Web抓取是从网站中提取数据的过程简单介绍!)
  https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-300x200.jpg 300w, https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-1024x683.jpg 1024w, https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-768x512.jpg 768w, https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-1536x1024.jpg 1536w, https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-2048x1365.jpg 2048w, https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-930x620.jpg 930w" />
  您在日常生活中通常做什么?阅读新闻、发送电子邮件、查找最具成本效益的产品或在线搜索工作?如您所知,大多数这些任务都可以通过网络爬虫自动完成。不需要花几个小时浏览网站,有电脑的话几分钟就能搞定。
  网页抓取是从网站中提取数据的过程。学习网页抓取就像学习 Beautiful Soup、Selenium 或 Scrapy 等库如何在 Python 中工作一样简单。但是,如果你不能将所有学到的概念付诸实践,那就是浪费时间。
  尝试网页抓取项目不仅可以帮助您学习网页抓取理论,还可以帮助您开发机器人、自动执行日常任务,并让您有动力学习这项新技能。在这篇文章中,我列出了一些可以自动化大多数人每天遇到的任务的项目。项目按难度列出,初级项目在开头,高级项目在文章末尾。
  一、自动化重复性任务
  为了使第一个项目对初学者友好,我们将使用 Beautiful Soup,因为它是最简单的用于网页抓取的 Python 库。
  这个项目的目标是从任何网站(例如news文章、post等)文章获取标题和主要段落。之后,将所有内容导出到 .txt 文件中,该文件应命名为文章 并带有标题。该项目的演示可以在下面的 gif 中找到。在这种情况下,我没有爬取一条新闻文章,而是爬取了电影“泰坦尼克号”的文本。第一个项目的代码可以在我的 Github 上找到。
  
  这个初学者项目将帮助我们熟悉 Python 中网页抓取的核心概念,例如如何从网站 获取 HTML、在网站 中查找元素以及将数据导出到 .txt 文件。
  当然,您可以手动复制粘贴数据,然后在不到一分钟的时间内创建一个 .txt 文件;然而,现在想象一下这样做十个或更多文章!手动完成需要很多时间,但是使用 Python 和 Beautiful Soup,我们可以创建一个脚本来提取这些数据,然后添加一个 for 循环来在几分钟内抓取多个页面。
  下面列出了一些其他重复性任务,您可以通过网络抓取来自动执行这些任务。请记住,您需要具备 Selenium 的基本知识才能自动执行这些操作(查看本指南以从头开始学习 Selenium)
  一个。发送邮件
  B.在社交媒体上发帖
  c.点菜
  二、获取足球数据:自动运动分析
  如果你喜欢运动,每场比赛结束后,你可以访问网站,它会提供诸如最终得分和球员表现等免费统计数据。在每次新游戏后获取这些数据是不是很酷?或者更好地想象能够使用这些数据来创建报告,以找到有关您最喜欢的球队或联赛的有趣见解。
  这是第二个项目的目标——获取收录您最喜欢的体育统计数据的网站。大多数情况下,这种类型的数据是在一个表中,所以一定要以CSV格式导出数据,以便您以后可以使用Pandas库读取数据并找到见解。为了更好地理解这个项目,请查看下面的 gif。在那个演示中,我提取了过去 3 年多场足球联赛的比分。
  
  大多数有锻炼数据的网站都使用 JavaScript 来动态更新数据。这意味着我们不能在这个项目中使用 Beautiful Soup 库。相反,我们将使用 Selenium 单击按钮,选择下拉列表中的元素,然后提取所需的数据。
  你可以在我的 Github 上找到这个项目的代码。您可以通过寻找在游戏中得分更高的团队来使该项目更具挑战性。有了这个,您可以创建一个报告,告诉您具有高得分趋势的匹配项。这将帮助您在分析足球比赛时做出更好的决定。在此链接上,您可以找到有关如何完成项目最后一部分的指南。
  三、Grab 求职门户:自动化求职
  通过抓取网络可以减少找工作的难度。诸如在多个页面中搜索新工作、检查特定工作要求和薪资范围等,如果您手动进行,可能需要大约 20 分钟。幸运的是,所有这一切都可以通过几行代码自动完成。
  在这个项目中,你应该创建一个机器人,它会抓取一个工作门户来获取特定工作的要求和薪水。您可以在本项目中使用 Beautiful Soup 或 Selenium,但方法会因您使用的库而异。
  如果您使用 Beautiful Soup,请只关注收录您要抓取的最终数据的页面。您可以按照此视频教程来帮助您开始此项目。
  话虽如此,我建议您使用Selenium,因为您可以在网站 上自由执行更多操作。最棒的是你可以在每次操作后运行代码,并在浏览器中查看机器人执行的步骤。要使用 Selenium 解决此问题,请考虑从您最喜欢的工作门户获取数据通常会遵循的所有步骤。
  例如,访问网站,写下职位名称,单击搜索按钮,然后浏览每个职位发布以提取任何相关信息。之后,使用 Selenium 库在 Python 中复制这些步骤。
  四、Grab 商品价格:获得最优惠的价格
  如果您想为特定商品找到最优惠的价格,购物可能会变得非常耗时。在网站 上找到汽车、电视和衣服的最优惠价格可能需要几个小时;幸运的是,您需要几分钟时间才能完成我们的下一个网络抓取项目。
  这是本文列出的最高级的项目,分为两部分。首先,去你最喜欢的网上商店,采集产品名称、价格、折扣和链接等数据,以便你以后可以找到它们。我建议你在这个项目中使用 Scrapy 库,如果你打算爬很多页面,因为它是 Python 中最快的网络爬行库。您可以按照本教程来帮助您开始这个项目。
  对于项目的第二部分,您必须跟踪提取的价格,以便在特定产品的价格大幅下降时收到通知。
  请记住,您可以将最终项目的想法应用到您感兴趣的其他领域。举几个例子。
  一个。抓住股价
  B.把握投注赔率
  c.获取加密货币价格
  例如,我不是抓取产品价格,而是抓取投注赔率。想法是一样的,在多个博彩公司中找到最佳赔率。然后在赔率增加时收到通知。
  原文:
  云管理服务专家新钛云服务张纯译

动态网页抓取(前情介绍前段时间开发了一个功能,解决过程中遇到的问题)

网站优化优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2021-09-12 00:07 • 来自相关话题

  动态网页抓取(前情介绍前段时间开发了一个功能,解决过程中遇到的问题)
  前期情况介绍
  前段时间开发了一个函数,通过HttpClient访问某个页面,获取该页面的所有html内容;之后,抓取得到的整个页面显示在我的网页上;但是过了一段时间,网页升级了。网页中的图片变成了动态加载,无法通过HttpClient直接获取完整的页面内容。图片为懒加载状态,无法显示正确内容。
  解决方案
  由于没有办法直接抓取静态页面,可以尝试动态抓取页面;如何抓取动态页面?在本文中,Selenium 用于动态抓取页面。通过Selenium模拟正常打开浏览器浏览网页的过程,当浏览到页面底部加载整个页面时,此时抓取整个网页的内容就可以得到整个网页的内容时间。 Selenium 的 WebDriver 可以模拟不同的浏览器。本文使用 Chrome 浏览器。对于其他支持的浏览器,可以通过查看WebDriver的实现类得到答案。
  编码
  参考Selenium库的jar包
  
org.seleniumhq.selenium
selenium-java
3.141.59

复制代码
  因为要模拟Chrome浏览器,所以需要下载chromedriver。基础工作已经完成,接下来就是开发代码了。废话不多说,直接上代码。
  public String selenium(String url) throws InterruptedException {
// 设置 chromedirver 的存放位置
System.getProperties().setProperty("webdriver.chrome.driver", "D:/lingy/chromedriver_win32/chromedriver.exe");
// 设置无头浏览器,这样就不会弹出浏览器窗口
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
Long scrollSize = 1000L;
WebDriver webDriver = new ChromeDriver(chromeOptions);
webDriver.get(url);
//设置浏览器的宽高
Dimension dimension = new Dimension(1000, scrollSize.intValue());
webDriver.manage().window().setSize(dimension);
String html = "";
//获取JS执行器,可以执行js代码来控制页面
JavascriptExecutor driver_js= ((JavascriptExecutor) webDriver);
//获取页面的高度
Long scrollHeight = (Long) driver_js.executeScript("return document.body.scrollHeight");
logger.info("article hight is : {}",scrollHeight);
//因为要模拟鼠标滚动浏览网页的效果,所以设置了每次滚动的高度,然后通过整个页面的高度计算出股东的次数
Long loopNum = scrollHeight/scrollSize;
loopNum = loopNum+1;
logger.info("page need scroll times : {}",loopNum);
for(int i =0 ; i < loopNum; i++){
Long start = i*scrollSize;
Long end = (i+1)*scrollSize;
//根据滚动的次数,依次滚动页面,为了图片能加载完全,停留1秒钟
driver_js.executeScript("scroll("+start+","+end+")");
Thread.sleep(1000);
}
//返回页面全部内容
html = (String)driver_js.executeScript("return document.documentElement.outerHTML");
webDriver.close();
return html;
}
复制代码
  此时就可以完整的获取到整个页面的内容了,但是这种方式获取到的原创内容在我们自己的页面上可能无法很好的展示出来。以下是实际操作中遇到的两个问题。
  解决过程中遇到的问题
  在展示爬取内容的过程中,存在图片跨域展示或防盗链问题。最初的解决方案是使用Nginx反向代理来代理图片URL,但是因为源网页图片是防盗链或者其他原因,无法进行代理;所以我用了另一种方法,通过将图片转换成Base64格式的内容替换原来的URL来解决这个问题确实可以解决这个问题,但是会引入新的问题。图片转Base64后,原来的网页内容会变得非常大,存储和展示过程中的请求会消耗存储空间和请求。时间。最后选择本地读取图片,通过Nginx代理进行处理。
   //获取网页图片元素
List imgList = webDriver.findElements(By.tagName("img"));
// data:image/gif;base64,
for(WebElement img : imgList){
String imgSrc = img.getAttribute("src");
logger.info("img's src is : {}",imgSrc);
String pattern = "^((http)|(https)).*";
boolean imgSrcPattern = !StringUtils.isEmpty(imgSrc) && Pattern.matches(pattern, imgSrc);
if(imgSrcPattern){
// String strNetImageToBase64 = changImgUrlToBase64(imgSrc);
// driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", "data:image/png;base64,"+strNetImageToBase64);
String imgUrlToImgFile = changImgUrlToImgFile(imgSrc);
//通过JS来替换页面图片
driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", imgUrlToImgFile);
}
}
复制代码
  关键代码:driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", imgUrlToImgFile);
  图片转Base64代码
  图片下载到本地的代码
   private static String changImgUrlToImgFile(String imgSrc){
String suffix = ".png";
if(imgSrc.indexOf("gif") != -1){
suffix = ".gif";
}else if(imgSrc.indexOf("jpg") != -1){
suffix = ".jpg";
}else if(imgSrc.indexOf("jpeg") != -1){
suffix = ".jpeg";
}else if(imgSrc.indexOf("png") != -1){
suffix = ".png";
}
String dir = "E:/lingy/asmImg/";
String fileName = System.currentTimeMillis()+suffix;
try {
URL imgURL = new URL(imgSrc);
final HttpURLConnection conn = (HttpURLConnection) imgURL.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(3000);
InputStream is = conn.getInputStream();
File imgFile = new File(dir+fileName);
if(!imgFile.exists()){
imgFile.createNewFile();
}
// FileOutputStream fos = new FileOutputStream(imgFile);
// final byte[] by = new byte[1024];
// int len = -1;
// while ((len = is.read(by)) != -1) {
// fos.write(by, 0, len);
// }
// is.close();
// FileUtils.copyURLToFile(imgURL,imgFile);
FileUtils.copyInputStreamToFile(is,imgFile);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String imagRootPath = "http://localhost/asmImg/";
return imagRootPath + fileName;
}
复制代码
  解决过程中遇到的第二个问题
  在爬取页面的过程中,由于需要模拟网页滚动的效果(页面越长越费时),整个爬取非常耗时。当前端对响应时间有要求的时候,建议大家说说爬取页面的过程,做成异步的。
  总结
  Selenium 在自动化测试、模拟浏览器行为、操作页面元素等方面功能更强大,自动化测试领域更专业,这里不做深入讨论,只简单介绍下过程动态抓取一个。关键是获取页面元素和执行JS脚本,主要使用webDriver.findElements()和driver_js.executeScript()两个方法。由于以上介绍只是简单的尝试,在其他场景中会遇到更复杂的情况。比如有些页面需要点击才能显示全部内容,这就需要调用js来触发。以上就是本次解题的回顾,希望能给大家带来一些思路和帮助。 查看全部

  动态网页抓取(前情介绍前段时间开发了一个功能,解决过程中遇到的问题)
  前期情况介绍
  前段时间开发了一个函数,通过HttpClient访问某个页面,获取该页面的所有html内容;之后,抓取得到的整个页面显示在我的网页上;但是过了一段时间,网页升级了。网页中的图片变成了动态加载,无法通过HttpClient直接获取完整的页面内容。图片为懒加载状态,无法显示正确内容。
  解决方案
  由于没有办法直接抓取静态页面,可以尝试动态抓取页面;如何抓取动态页面?在本文中,Selenium 用于动态抓取页面。通过Selenium模拟正常打开浏览器浏览网页的过程,当浏览到页面底部加载整个页面时,此时抓取整个网页的内容就可以得到整个网页的内容时间。 Selenium 的 WebDriver 可以模拟不同的浏览器。本文使用 Chrome 浏览器。对于其他支持的浏览器,可以通过查看WebDriver的实现类得到答案。
  编码
  参考Selenium库的jar包
  
org.seleniumhq.selenium
selenium-java
3.141.59

复制代码
  因为要模拟Chrome浏览器,所以需要下载chromedriver。基础工作已经完成,接下来就是开发代码了。废话不多说,直接上代码。
  public String selenium(String url) throws InterruptedException {
// 设置 chromedirver 的存放位置
System.getProperties().setProperty("webdriver.chrome.driver", "D:/lingy/chromedriver_win32/chromedriver.exe");
// 设置无头浏览器,这样就不会弹出浏览器窗口
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
Long scrollSize = 1000L;
WebDriver webDriver = new ChromeDriver(chromeOptions);
webDriver.get(url);
//设置浏览器的宽高
Dimension dimension = new Dimension(1000, scrollSize.intValue());
webDriver.manage().window().setSize(dimension);
String html = "";
//获取JS执行器,可以执行js代码来控制页面
JavascriptExecutor driver_js= ((JavascriptExecutor) webDriver);
//获取页面的高度
Long scrollHeight = (Long) driver_js.executeScript("return document.body.scrollHeight");
logger.info("article hight is : {}",scrollHeight);
//因为要模拟鼠标滚动浏览网页的效果,所以设置了每次滚动的高度,然后通过整个页面的高度计算出股东的次数
Long loopNum = scrollHeight/scrollSize;
loopNum = loopNum+1;
logger.info("page need scroll times : {}",loopNum);
for(int i =0 ; i < loopNum; i++){
Long start = i*scrollSize;
Long end = (i+1)*scrollSize;
//根据滚动的次数,依次滚动页面,为了图片能加载完全,停留1秒钟
driver_js.executeScript("scroll("+start+","+end+")");
Thread.sleep(1000);
}
//返回页面全部内容
html = (String)driver_js.executeScript("return document.documentElement.outerHTML");
webDriver.close();
return html;
}
复制代码
  此时就可以完整的获取到整个页面的内容了,但是这种方式获取到的原创内容在我们自己的页面上可能无法很好的展示出来。以下是实际操作中遇到的两个问题。
  解决过程中遇到的问题
  在展示爬取内容的过程中,存在图片跨域展示或防盗链问题。最初的解决方案是使用Nginx反向代理来代理图片URL,但是因为源网页图片是防盗链或者其他原因,无法进行代理;所以我用了另一种方法,通过将图片转换成Base64格式的内容替换原来的URL来解决这个问题确实可以解决这个问题,但是会引入新的问题。图片转Base64后,原来的网页内容会变得非常大,存储和展示过程中的请求会消耗存储空间和请求。时间。最后选择本地读取图片,通过Nginx代理进行处理。
   //获取网页图片元素
List imgList = webDriver.findElements(By.tagName("img"));
// data:image/gif;base64,
for(WebElement img : imgList){
String imgSrc = img.getAttribute("src");
logger.info("img's src is : {}",imgSrc);
String pattern = "^((http)|(https)).*";
boolean imgSrcPattern = !StringUtils.isEmpty(imgSrc) && Pattern.matches(pattern, imgSrc);
if(imgSrcPattern){
// String strNetImageToBase64 = changImgUrlToBase64(imgSrc);
// driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", "data:image/png;base64,"+strNetImageToBase64);
String imgUrlToImgFile = changImgUrlToImgFile(imgSrc);
//通过JS来替换页面图片
driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", imgUrlToImgFile);
}
}
复制代码
  关键代码:driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", imgUrlToImgFile);
  图片转Base64代码
  图片下载到本地的代码
   private static String changImgUrlToImgFile(String imgSrc){
String suffix = ".png";
if(imgSrc.indexOf("gif") != -1){
suffix = ".gif";
}else if(imgSrc.indexOf("jpg") != -1){
suffix = ".jpg";
}else if(imgSrc.indexOf("jpeg") != -1){
suffix = ".jpeg";
}else if(imgSrc.indexOf("png") != -1){
suffix = ".png";
}
String dir = "E:/lingy/asmImg/";
String fileName = System.currentTimeMillis()+suffix;
try {
URL imgURL = new URL(imgSrc);
final HttpURLConnection conn = (HttpURLConnection) imgURL.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(3000);
InputStream is = conn.getInputStream();
File imgFile = new File(dir+fileName);
if(!imgFile.exists()){
imgFile.createNewFile();
}
// FileOutputStream fos = new FileOutputStream(imgFile);
// final byte[] by = new byte[1024];
// int len = -1;
// while ((len = is.read(by)) != -1) {
// fos.write(by, 0, len);
// }
// is.close();
// FileUtils.copyURLToFile(imgURL,imgFile);
FileUtils.copyInputStreamToFile(is,imgFile);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String imagRootPath = "http://localhost/asmImg/";
return imagRootPath + fileName;
}
复制代码
  解决过程中遇到的第二个问题
  在爬取页面的过程中,由于需要模拟网页滚动的效果(页面越长越费时),整个爬取非常耗时。当前端对响应时间有要求的时候,建议大家说说爬取页面的过程,做成异步的。
  总结
  Selenium 在自动化测试、模拟浏览器行为、操作页面元素等方面功能更强大,自动化测试领域更专业,这里不做深入讨论,只简单介绍下过程动态抓取一个。关键是获取页面元素和执行JS脚本,主要使用webDriver.findElements()和driver_js.executeScript()两个方法。由于以上介绍只是简单的尝试,在其他场景中会遇到更复杂的情况。比如有些页面需要点击才能显示全部内容,这就需要调用js来触发。以上就是本次解题的回顾,希望能给大家带来一些思路和帮助。

动态网页抓取(一个程序定时读取这个页面的内容怎么办?|编程问答 )

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

  动态网页抓取(一个程序定时读取这个页面的内容怎么办?|编程问答
)
  如何捕获动态web内容?请询问:有一个信息系统需要用户名和密码才能输入。输入超链接“:8080/MIS/show.JSP?Id=1000”后,将显示一个统计表
  现在我想写一个程序来定期阅读这个页面的内容。怎么做。现在我被困在进入系统的地方
  如果未通过授权验证,请键入:8080/MIS/show。JSP?地址栏中Id=1000,内容为错误信息
  注意:我不能更改权限认证------------------编程问答------------------注意------------------编程问答------------------使用httpclient,它可以填写表单------------------编程问答------------------用JS编写计时器,然后定期访问此链接-----------------编程问答-----------------编程问答--------------------
  
  --------------------编程问答------------------我需要先用用户名和密码登录,然后填写表格。httpclient能做到吗------------------编程问答------------------当然,坦率地说,表单不仅仅是一个HTTP请求-----------------编程问答-----------------你可以通过每天回复获得10个可用点-----------------编程问答-----------------聚焦-----------------编程问答------------------------------------------眩晕,我也遇到了这个问题-----------------编程问答-----------------我也有这个问题。一位大侠也告诉我使用httpclient。我还没有检查它的使用情况,估计可用性------------------编程问答------------------我的问题是如何获取JS脚本的动态输出内容------------------编程问答------------------importjava.io.bufferedinputstream;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.StringReader;。HttpURLConnection;。网址;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importorg.w3c.dom.Document;importorg.xml.sax.InputSource;publicclassTest{publicstaticvoidmain(String[]args)throwException{Stringuri=“”;Stringencoding=“gb2312”;URLurl=newURL(uri);System.getProperties().setProperty(“http.proxyHost”,”172. 28. 88.2”);System.getProperties().setProperty(“http.proxyPort”,“80”);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.connect();InputStreamin=newBufferedInputStream(conn.getInputStream());InputStreamReaderisr=newInputStreamReader(in,编码);intstr=-1;StringBuffersb=newStringBuffer();while((str=isr.read())!=-1)sb.append((char)str);DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderdb=dbf.newDocumentBuilder();isr.close();Documentdoc=db.parse(newinputsource(newstringreader(sb.Tostring());//这将生成一个doc类型}
  根据自己的格式。------------编程问答-----------------学习-----------------编程问答-----------------关注下的学习
  补充:Java , Java SE 查看全部

  动态网页抓取(一个程序定时读取这个页面的内容怎么办?|编程问答
)
  如何捕获动态web内容?请询问:有一个信息系统需要用户名和密码才能输入。输入超链接“:8080/MIS/show.JSP?Id=1000”后,将显示一个统计表
  现在我想写一个程序来定期阅读这个页面的内容。怎么做。现在我被困在进入系统的地方
  如果未通过授权验证,请键入:8080/MIS/show。JSP?地址栏中Id=1000,内容为错误信息
  注意:我不能更改权限认证------------------编程问答------------------注意------------------编程问答------------------使用httpclient,它可以填写表单------------------编程问答------------------用JS编写计时器,然后定期访问此链接-----------------编程问答-----------------编程问答--------------------
  
  --------------------编程问答------------------我需要先用用户名和密码登录,然后填写表格。httpclient能做到吗------------------编程问答------------------当然,坦率地说,表单不仅仅是一个HTTP请求-----------------编程问答-----------------你可以通过每天回复获得10个可用点-----------------编程问答-----------------聚焦-----------------编程问答------------------------------------------眩晕,我也遇到了这个问题-----------------编程问答-----------------我也有这个问题。一位大侠也告诉我使用httpclient。我还没有检查它的使用情况,估计可用性------------------编程问答------------------我的问题是如何获取JS脚本的动态输出内容------------------编程问答------------------importjava.io.bufferedinputstream;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.StringReader;。HttpURLConnection;。网址;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importorg.w3c.dom.Document;importorg.xml.sax.InputSource;publicclassTest{publicstaticvoidmain(String[]args)throwException{Stringuri=“”;Stringencoding=“gb2312”;URLurl=newURL(uri);System.getProperties().setProperty(“http.proxyHost”,”172. 28. 88.2”);System.getProperties().setProperty(“http.proxyPort”,“80”);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.connect();InputStreamin=newBufferedInputStream(conn.getInputStream());InputStreamReaderisr=newInputStreamReader(in,编码);intstr=-1;StringBuffersb=newStringBuffer();while((str=isr.read())!=-1)sb.append((char)str);DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderdb=dbf.newDocumentBuilder();isr.close();Documentdoc=db.parse(newinputsource(newstringreader(sb.Tostring());//这将生成一个doc类型}
  根据自己的格式。------------编程问答-----------------学习-----------------编程问答-----------------关注下的学习
  补充:Java , Java SE

动态网页抓取(Python中使用CSV库来写入数据行的方法及获取文本)

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

  动态网页抓取(Python中使用CSV库来写入数据行的方法及获取文本)
  好的,因为我试着回答你的其他问题,虽然你没有完全解释你想要什么,我会继续。
  要记住的一件事是,Selenium 正在运行您的浏览器,而不是传统的网络爬虫。这意味着,如果 url 更改不是什么大问题,那么必须更改的唯一方法是在弹出窗口出现时更改 Selenium 获取的方式。
  您可以通过其他代码做的一件事是寻找航班
  driver.implicitly_wait(40)//40 is the amount of seconds
  这将等待至少 40 秒,然后崩溃,然后在页面加载或您接下来想要在 dom 中执行的任何操作时启动。
  现在,如果你想抓取所有出现的飞行数据,这将是非常棘手的。您可以执行 for 循环并抓取页面上的每个元素,然后将其写入 csv 文件。
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
for flights in class_for_departure_flight:
try:
with open('my_flights.csv', 'a', newline='') as flights_book:
csv_writer = csv.writer(flights_book, delimiter = ',')
csv_writer.writerow(flights.text)
except:
print("Missed a flight")
  在第二部分需要注意的是,我在 Python 中使用 CSV 库来写入数据行。注意可以把一堆数据追加在一起,写成一行,如下图:
  data = (flights, dates, times)
csv_writer.writerow(data)
  它将正确处理电子表格中同一行上的所有这些不同内容。
  另外两个容易错过的大事是:
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
  这是driver.find_元素_by_xpath,你会注意到元素是复数,这意味着它正在寻找多个具有相同class_name的对象并将它们存储在一个数组中,以便你可以在for循环迭代中匹配它们。
  下一部分是 csv_writer.writerow(flights.text)。当您迭代机票时,您需要获取文本以执行此操作,您可以执行 flight.text。如果这可以仅使用搜索功能来完成,那么您也可以执行类似的操作。
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]').text
  希望这会有所帮助! 查看全部

  动态网页抓取(Python中使用CSV库来写入数据行的方法及获取文本)
  好的,因为我试着回答你的其他问题,虽然你没有完全解释你想要什么,我会继续。
  要记住的一件事是,Selenium 正在运行您的浏览器,而不是传统的网络爬虫。这意味着,如果 url 更改不是什么大问题,那么必须更改的唯一方法是在弹出窗口出现时更改 Selenium 获取的方式。
  您可以通过其他代码做的一件事是寻找航班
  driver.implicitly_wait(40)//40 is the amount of seconds
  这将等待至少 40 秒,然后崩溃,然后在页面加载或您接下来想要在 dom 中执行的任何操作时启动。
  现在,如果你想抓取所有出现的飞行数据,这将是非常棘手的。您可以执行 for 循环并抓取页面上的每个元素,然后将其写入 csv 文件。
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
for flights in class_for_departure_flight:
try:
with open('my_flights.csv', 'a', newline='') as flights_book:
csv_writer = csv.writer(flights_book, delimiter = ',')
csv_writer.writerow(flights.text)
except:
print("Missed a flight")
  在第二部分需要注意的是,我在 Python 中使用 CSV 库来写入数据行。注意可以把一堆数据追加在一起,写成一行,如下图:
  data = (flights, dates, times)
csv_writer.writerow(data)
  它将正确处理电子表格中同一行上的所有这些不同内容。
  另外两个容易错过的大事是:
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]')
  这是driver.find_元素_by_xpath,你会注意到元素是复数,这意味着它正在寻找多个具有相同class_name的对象并将它们存储在一个数组中,以便你可以在for循环迭代中匹配它们。
  下一部分是 csv_writer.writerow(flights.text)。当您迭代机票时,您需要获取文本以执行此操作,您可以执行 flight.text。如果这可以仅使用搜索功能来完成,那么您也可以执行类似的操作。
  class_for_departure_flight = driver.find_elements_by_xpath('//div[@class="iata"]').text
  希望这会有所帮助!

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

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

  动态网页抓取(网页获取和解析速度和性能的应用场景详解!)
  (4)support 代理服务器
  (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
  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
  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)support 代理服务器
  (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
  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
  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 个评论 • 93 次浏览 • 2021-09-12 13:01 • 来自相关话题

  动态网页抓取(服务器目录文章目录动态网页和静态网页的区别(一))
  00.目录
  文章directory
  动态网页和静态网页的区别,首先要分别理解两个概念,什么是静态网页,什么是动态网页,学会区分静态和动态。
  01.静态网页
  (1)Static 网页不能简单理解为静态网页,它主要是指没有程序代码,只有HTML(即:超文本标记语言)的网页,通常以.html、.htm或.xml为后缀等等。虽然静态网页的内容一旦创建就不会改变,但是静态网页也收录了一些活跃的部分,主要是一些GIF动画和其他html
  (2)打开静态网页,用户可以直接双击,任何人随时打开的页面内容都是一样的。数据库
  02.动态网页
  (1)动态网页是指一种网页编程技术,相对于静态网页。动态网页的网页文件除了HTML标签外,还收录一些特定功能的程序代码。这些代码可以使浏览器并且服务器可以交互,因此服务器根据客户的不同请求动态生成网页内容。编程
  即:与静态网页相比,动态网页具有相同的页面代码,但显示的内容会随着时间、环境或数据库操作的结果而变化。浏览器
  (2)动态网页与网页上的各种动画、滚动字幕等视觉动态效果没有直接关系。动态网页也可以是纯文本内容或收录各种动画内容。这些只是具体的表现形式网页的内容,不管网页有没有动态效果,只要是动态网站技术(如PHP、ASP、JSP等)生成的网页,都可以称为动态网页. 服务器
  03.动态网页和静态网页的区别
  (1)更新维护:ide
  一旦静态网页内容发布到网站服务器上,这些网页的内容就存储在网站服务器上,无论是否有用户访问。如果要修改网页的内容,必须修改其源代码,然后重新上传到服务器。静态网页没有数据库支持。当网站信息量大时,网页制作和维护难度大。动画
  动态网页可以根据用户的不同请求、时间或环境需求动态生成不同的网页内容,动态网页通常基于数据库技术,可以大大减少网站maintenance work网站
  (2)Interactivity: 搜索引擎
  由于静态网页的很多内容是固定的,在功能上有很大的局限性,所以交互性较差。 xml
  动态网页可以实现更多功能,如用户登录、注册、查询等
  (3)响应速度:
  静态网页内容比较固定,容易被搜索引擎检索到,不需要链接数据库,所以响应速度更快
  动态网页实际上并不是独立存在于服务器上的网页文件。服务器只有在用户请求时才返回一个完整的网页,涉及到数据链访问、查询等一系列过程,所以响应速度比较慢
  (4)访问功能:
  静态网页的每个网页都有一个固定的网址,网页网址后缀为.htm、.html、.shtml等常见形式,不收录“?”,可以直接双击打开点击
  “?”在动态网页中搜索引擎检索存在一定的问题。搜索引擎通常无法访问网站数据库中的所有网页,或者出于技术考虑,搜索将不会被抓到“?”之后的内容。在网址中,不能直接双击打开
  04.总结
  如果网页的内容比较简单,不需要频繁修改,或者只是为了展示信息,使用静态网页,操作简单,不需要数据库管理。
  如果网页的内容比较复杂,功能多,变化频繁,内容比较实时,就使用动态网页 查看全部

  动态网页抓取(服务器目录文章目录动态网页和静态网页的区别(一))
  00.目录
  文章directory
  动态网页和静态网页的区别,首先要分别理解两个概念,什么是静态网页,什么是动态网页,学会区分静态和动态。
  01.静态网页
  (1)Static 网页不能简单理解为静态网页,它主要是指没有程序代码,只有HTML(即:超文本标记语言)的网页,通常以.html、.htm或.xml为后缀等等。虽然静态网页的内容一旦创建就不会改变,但是静态网页也收录了一些活跃的部分,主要是一些GIF动画和其他html
  (2)打开静态网页,用户可以直接双击,任何人随时打开的页面内容都是一样的。数据库
  02.动态网页
  (1)动态网页是指一种网页编程技术,相对于静态网页。动态网页的网页文件除了HTML标签外,还收录一些特定功能的程序代码。这些代码可以使浏览器并且服务器可以交互,因此服务器根据客户的不同请求动态生成网页内容。编程
  即:与静态网页相比,动态网页具有相同的页面代码,但显示的内容会随着时间、环境或数据库操作的结果而变化。浏览器
  (2)动态网页与网页上的各种动画、滚动字幕等视觉动态效果没有直接关系。动态网页也可以是纯文本内容或收录各种动画内容。这些只是具体的表现形式网页的内容,不管网页有没有动态效果,只要是动态网站技术(如PHP、ASP、JSP等)生成的网页,都可以称为动态网页. 服务器
  03.动态网页和静态网页的区别
  (1)更新维护:ide
  一旦静态网页内容发布到网站服务器上,这些网页的内容就存储在网站服务器上,无论是否有用户访问。如果要修改网页的内容,必须修改其源代码,然后重新上传到服务器。静态网页没有数据库支持。当网站信息量大时,网页制作和维护难度大。动画
  动态网页可以根据用户的不同请求、时间或环境需求动态生成不同的网页内容,动态网页通常基于数据库技术,可以大大减少网站maintenance work网站
  (2)Interactivity: 搜索引擎
  由于静态网页的很多内容是固定的,在功能上有很大的局限性,所以交互性较差。 xml
  动态网页可以实现更多功能,如用户登录、注册、查询等
  (3)响应速度:
  静态网页内容比较固定,容易被搜索引擎检索到,不需要链接数据库,所以响应速度更快
  动态网页实际上并不是独立存在于服务器上的网页文件。服务器只有在用户请求时才返回一个完整的网页,涉及到数据链访问、查询等一系列过程,所以响应速度比较慢
  (4)访问功能:
  静态网页的每个网页都有一个固定的网址,网页网址后缀为.htm、.html、.shtml等常见形式,不收录“?”,可以直接双击打开点击
  “?”在动态网页中搜索引擎检索存在一定的问题。搜索引擎通常无法访问网站数据库中的所有网页,或者出于技术考虑,搜索将不会被抓到“?”之后的内容。在网址中,不能直接双击打开
  04.总结
  如果网页的内容比较简单,不需要频繁修改,或者只是为了展示信息,使用静态网页,操作简单,不需要数据库管理。
  如果网页的内容比较复杂,功能多,变化频繁,内容比较实时,就使用动态网页

动态网页抓取( 微信朋友圈的数据入口搞定了,获取外链。(图))

网站优化优采云 发表了文章 • 0 个评论 • 191 次浏览 • 2021-09-12 00:08 • 来自相关话题

  动态网页抓取(
微信朋友圈的数据入口搞定了,获取外链。(图))
  
  2、之后,在首页点击【创建图书】-->【微信相册】。
  
  3、点击【开始制作】-->【添加随机指定的图书编辑为好友】,长按二维码即可添加好友。
  4、 耐心等待微信的后续制作。完成后,您将收到编辑器的消息提醒,如下图所示。
  至此,我们已经完成了微信朋友圈的数据录入,并获得了外链。
  确保朋友圈设置为【全开】,默认全开,不知道怎么设置的请自行百度。
  
  5、点击外部链接,然后进入网页,需要使用微信扫码授权登录。
  6、扫码授权,即可进入网页版微信,如下图。
  
  7、 然后我们就可以写一个爬虫程序正常抓取信息了。这里,编辑器使用Scrapy爬虫框架,Python使用版本3,集成开发环境使用Pycharm。下图为微信首页,图片由编辑定制。
  
  二、创建爬虫项目
  1、 确保您的计算机上安装了 Scrapy。然后选择一个文件夹,在该文件夹下输入命令行,输入执行命令:
  scrapy startproject weixin_moment
  ,等待Scrapy爬虫项目生成。
  2、在命令行输入cd weixin_moment,进入创建好的weixin_moment目录。然后输入命令:
  scrapy genspider 'moment' 'chushu.la'
  ,创建朋友圈爬虫,如下图。
  
  3、执行以上两步后的文件夹结构如下:
  
  三、分析网页数据
  1、进入微信首页,按F12,建议使用谷歌浏览器,查看元素,点击“网络”标签,然后勾选“保存日志”,即保存日志,如下图所示。可以看到首页的请求方法是get,返回的状态码是200,表示请求成功。
  
  2、点击“Response”(服务器响应),可以看到系统返回的数据是JSON格式的。说明我们需要在程序中处理JSON格式的数据。
  
  3、点击微信本的“导航”窗口,可以看到数据按月加载。当导航按钮被点击时,它会加载相应月份的 Moments 数据。
  
  4、点击[2014/04]月,然后查看服务器响应数据,可以看到页面显示的数据与服务器响应对应。
  
  5、查看请求方法,可以看到此时的请求方法已经变成了POST。细心的小伙伴可以看到,点击“下个月”或其他导航月份时,首页的网址没有变化,说明该网页是动态加载的。对比多个网页请求后,我们可以看到“Request Payload”下的数据包参数在不断变化,如下图所示。
  
  6、展开服务器响应数据,将数据放入JSON在线解析器中,如下图:
  
  可以看到朋友圈的数据存放在paras /data节点下。
  至此,网页分析和数据来源已确定。接下来,我将编写一个程序来捕获数据。请期待下一篇文章~~ 查看全部

  动态网页抓取(
微信朋友圈的数据入口搞定了,获取外链。(图))
  
  2、之后,在首页点击【创建图书】-->【微信相册】。
  
  3、点击【开始制作】-->【添加随机指定的图书编辑为好友】,长按二维码即可添加好友。
  4、 耐心等待微信的后续制作。完成后,您将收到编辑器的消息提醒,如下图所示。
  至此,我们已经完成了微信朋友圈的数据录入,并获得了外链。
  确保朋友圈设置为【全开】,默认全开,不知道怎么设置的请自行百度。
  
  5、点击外部链接,然后进入网页,需要使用微信扫码授权登录。
  6、扫码授权,即可进入网页版微信,如下图。
  
  7、 然后我们就可以写一个爬虫程序正常抓取信息了。这里,编辑器使用Scrapy爬虫框架,Python使用版本3,集成开发环境使用Pycharm。下图为微信首页,图片由编辑定制。
  
  二、创建爬虫项目
  1、 确保您的计算机上安装了 Scrapy。然后选择一个文件夹,在该文件夹下输入命令行,输入执行命令:
  scrapy startproject weixin_moment
  ,等待Scrapy爬虫项目生成。
  2、在命令行输入cd weixin_moment,进入创建好的weixin_moment目录。然后输入命令:
  scrapy genspider 'moment' 'chushu.la'
  ,创建朋友圈爬虫,如下图。
  
  3、执行以上两步后的文件夹结构如下:
  
  三、分析网页数据
  1、进入微信首页,按F12,建议使用谷歌浏览器,查看元素,点击“网络”标签,然后勾选“保存日志”,即保存日志,如下图所示。可以看到首页的请求方法是get,返回的状态码是200,表示请求成功。
  
  2、点击“Response”(服务器响应),可以看到系统返回的数据是JSON格式的。说明我们需要在程序中处理JSON格式的数据。
  
  3、点击微信本的“导航”窗口,可以看到数据按月加载。当导航按钮被点击时,它会加载相应月份的 Moments 数据。
  
  4、点击[2014/04]月,然后查看服务器响应数据,可以看到页面显示的数据与服务器响应对应。
  
  5、查看请求方法,可以看到此时的请求方法已经变成了POST。细心的小伙伴可以看到,点击“下个月”或其他导航月份时,首页的网址没有变化,说明该网页是动态加载的。对比多个网页请求后,我们可以看到“Request Payload”下的数据包参数在不断变化,如下图所示。
  
  6、展开服务器响应数据,将数据放入JSON在线解析器中,如下图:
  
  可以看到朋友圈的数据存放在paras /data节点下。
  至此,网页分析和数据来源已确定。接下来,我将编写一个程序来捕获数据。请期待下一篇文章~~

动态网页抓取( Web抓取是从网站中提取数据的过程简单介绍!)

网站优化优采云 发表了文章 • 0 个评论 • 146 次浏览 • 2021-09-12 00:08 • 来自相关话题

  动态网页抓取(
Web抓取是从网站中提取数据的过程简单介绍!)
  
  您在日常生活中通常做什么?阅读新闻、发送电子邮件、查找最具成本效益的产品或在线搜索工作?如您所知,大多数这些任务都可以通过网络爬虫自动完成。不需要花几个小时浏览网站,有电脑的话几分钟就能搞定。
  网页抓取是从网站中提取数据的过程。学习网页抓取就像学习 Beautiful Soup、Selenium 或 Scrapy 等库如何在 Python 中工作一样简单。但是,如果你不能将所有学到的概念付诸实践,那就是浪费时间。
  尝试网页抓取项目不仅可以帮助您学习网页抓取理论,还可以帮助您开发机器人、自动执行日常任务,并让您有动力学习这项新技能。在这篇文章中,我列出了一些可以自动化大多数人每天遇到的任务的项目。项目按难度列出,初级项目在开头,高级项目在文章末尾。
  一、自动化重复性任务
  为了使第一个项目对初学者友好,我们将使用 Beautiful Soup,因为它是最简单的用于网页抓取的 Python 库。
  这个项目的目标是从任何网站(例如news文章、post等)文章获取标题和主要段落。之后,将所有内容导出到 .txt 文件中,该文件应命名为文章 并带有标题。该项目的演示可以在下面的 gif 中找到。在这种情况下,我没有爬取一条新闻文章,而是爬取了电影“泰坦尼克号”的文本。第一个项目的代码可以在我的 Github 上找到。
  
  这个初学者项目将帮助我们熟悉 Python 中网页抓取的核心概念,例如如何从网站 获取 HTML、在网站 中查找元素以及将数据导出到 .txt 文件。
  当然,您可以手动复制粘贴数据,然后在不到一分钟的时间内创建一个 .txt 文件;然而,现在想象一下这样做十个或更多文章!手动完成需要很多时间,但是使用 Python 和 Beautiful Soup,我们可以创建一个脚本来提取这些数据,然后添加一个 for 循环来在几分钟内抓取多个页面。
  下面列出了一些其他重复性任务,您可以通过网络抓取来自动执行这些任务。请记住,您需要具备 Selenium 的基本知识才能自动执行这些操作(查看本指南以从头开始学习 Selenium)
  一个。发送邮件
  B.在社交媒体上发帖
  c.点菜
  二、获取足球数据:自动运动分析
  如果你喜欢运动,每场比赛结束后,你可以访问网站,它会提供诸如最终得分和球员表现等免费统计数据。在每次新游戏后获取这些数据是不是很酷?或者更好地想象能够使用这些数据来创建报告,以找到有关您最喜欢的球队或联赛的有趣见解。
  这是第二个项目的目标——获取收录您最喜欢的体育统计数据的网站。大多数情况下,这种类型的数据是在一个表中,所以一定要以CSV格式导出数据,以便您以后可以使用Pandas库读取数据并找到见解。为了更好地理解这个项目,请查看下面的 gif。在那个演示中,我提取了过去 3 年多场足球联赛的比分。
  
  大多数有锻炼数据的网站都使用 JavaScript 来动态更新数据。这意味着我们不能在这个项目中使用 Beautiful Soup 库。相反,我们将使用 Selenium 单击按钮,选择下拉列表中的元素,然后提取所需的数据。
  你可以在我的 Github 上找到这个项目的代码。您可以通过寻找在游戏中得分更高的团队来使该项目更具挑战性。有了这个,您可以创建一个报告,告诉您具有高得分趋势的匹配项。这将帮助您在分析足球比赛时做出更好的决定。在此链接上,您可以找到有关如何完成项目最后一部分的指南。
  三、Grab 求职门户:自动化求职
  通过抓取网络可以减少找工作的难度。诸如在多个页面中搜索新工作、检查特定工作要求和薪资范围等,如果您手动进行,可能需要大约 20 分钟。幸运的是,所有这一切都可以通过几行代码自动完成。
  在这个项目中,你应该创建一个机器人,它会抓取一个工作门户来获取特定工作的要求和薪水。您可以在本项目中使用 Beautiful Soup 或 Selenium,但方法会因您使用的库而异。
  如果您使用 Beautiful Soup,请只关注收录您要抓取的最终数据的页面。您可以按照此视频教程来帮助您开始此项目。
  话虽如此,我建议您使用Selenium,因为您可以在网站 上自由执行更多操作。最棒的是你可以在每次操作后运行代码,并在浏览器中查看机器人执行的步骤。要使用 Selenium 解决此问题,请考虑从您最喜欢的工作门户获取数据通常会遵循的所有步骤。
  例如,访问网站,写下职位名称,单击搜索按钮,然后浏览每个职位发布以提取任何相关信息。之后,使用 Selenium 库在 Python 中复制这些步骤。
  四、Grab 商品价格:获得最优惠的价格
  如果您想为特定商品找到最优惠的价格,购物可能会变得非常耗时。在网站 上找到汽车、电视和衣服的最优惠价格可能需要几个小时;幸运的是,您需要几分钟时间才能完成我们的下一个网络抓取项目。
  这是本文列出的最高级的项目,分为两部分。首先,去你最喜欢的网上商店,采集产品名称、价格、折扣和链接等数据,以便你以后可以找到它们。我建议你在这个项目中使用 Scrapy 库,如果你打算爬很多页面,因为它是 Python 中最快的网络爬行库。您可以按照本教程来帮助您开始这个项目。
  对于项目的第二部分,您必须跟踪提取的价格,以便在特定产品的价格大幅下降时收到通知。
  请记住,您可以将最终项目的想法应用到您感兴趣的其他领域。举几个例子。
  一个。抓住股价
  B.把握投注赔率
  c.获取加密货币价格
  例如,我不是抓取产品价格,而是抓取投注赔率。想法是一样的,在多个博彩公司中找到最佳赔率。然后在赔率增加时收到通知。
  原文:
  云管理服务专家新钛云服务张纯译 查看全部

  动态网页抓取(
Web抓取是从网站中提取数据的过程简单介绍!)
  https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-300x200.jpg 300w, https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-1024x683.jpg 1024w, https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-768x512.jpg 768w, https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-1536x1024.jpg 1536w, https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-2048x1365.jpg 2048w, https://www.tyun.cn/blog/wp-co ... 1/07/千库网_商务办公互联网时代摄影图_摄影图编号86904-930x620.jpg 930w" />
  您在日常生活中通常做什么?阅读新闻、发送电子邮件、查找最具成本效益的产品或在线搜索工作?如您所知,大多数这些任务都可以通过网络爬虫自动完成。不需要花几个小时浏览网站,有电脑的话几分钟就能搞定。
  网页抓取是从网站中提取数据的过程。学习网页抓取就像学习 Beautiful Soup、Selenium 或 Scrapy 等库如何在 Python 中工作一样简单。但是,如果你不能将所有学到的概念付诸实践,那就是浪费时间。
  尝试网页抓取项目不仅可以帮助您学习网页抓取理论,还可以帮助您开发机器人、自动执行日常任务,并让您有动力学习这项新技能。在这篇文章中,我列出了一些可以自动化大多数人每天遇到的任务的项目。项目按难度列出,初级项目在开头,高级项目在文章末尾。
  一、自动化重复性任务
  为了使第一个项目对初学者友好,我们将使用 Beautiful Soup,因为它是最简单的用于网页抓取的 Python 库。
  这个项目的目标是从任何网站(例如news文章、post等)文章获取标题和主要段落。之后,将所有内容导出到 .txt 文件中,该文件应命名为文章 并带有标题。该项目的演示可以在下面的 gif 中找到。在这种情况下,我没有爬取一条新闻文章,而是爬取了电影“泰坦尼克号”的文本。第一个项目的代码可以在我的 Github 上找到。
  
  这个初学者项目将帮助我们熟悉 Python 中网页抓取的核心概念,例如如何从网站 获取 HTML、在网站 中查找元素以及将数据导出到 .txt 文件。
  当然,您可以手动复制粘贴数据,然后在不到一分钟的时间内创建一个 .txt 文件;然而,现在想象一下这样做十个或更多文章!手动完成需要很多时间,但是使用 Python 和 Beautiful Soup,我们可以创建一个脚本来提取这些数据,然后添加一个 for 循环来在几分钟内抓取多个页面。
  下面列出了一些其他重复性任务,您可以通过网络抓取来自动执行这些任务。请记住,您需要具备 Selenium 的基本知识才能自动执行这些操作(查看本指南以从头开始学习 Selenium)
  一个。发送邮件
  B.在社交媒体上发帖
  c.点菜
  二、获取足球数据:自动运动分析
  如果你喜欢运动,每场比赛结束后,你可以访问网站,它会提供诸如最终得分和球员表现等免费统计数据。在每次新游戏后获取这些数据是不是很酷?或者更好地想象能够使用这些数据来创建报告,以找到有关您最喜欢的球队或联赛的有趣见解。
  这是第二个项目的目标——获取收录您最喜欢的体育统计数据的网站。大多数情况下,这种类型的数据是在一个表中,所以一定要以CSV格式导出数据,以便您以后可以使用Pandas库读取数据并找到见解。为了更好地理解这个项目,请查看下面的 gif。在那个演示中,我提取了过去 3 年多场足球联赛的比分。
  
  大多数有锻炼数据的网站都使用 JavaScript 来动态更新数据。这意味着我们不能在这个项目中使用 Beautiful Soup 库。相反,我们将使用 Selenium 单击按钮,选择下拉列表中的元素,然后提取所需的数据。
  你可以在我的 Github 上找到这个项目的代码。您可以通过寻找在游戏中得分更高的团队来使该项目更具挑战性。有了这个,您可以创建一个报告,告诉您具有高得分趋势的匹配项。这将帮助您在分析足球比赛时做出更好的决定。在此链接上,您可以找到有关如何完成项目最后一部分的指南。
  三、Grab 求职门户:自动化求职
  通过抓取网络可以减少找工作的难度。诸如在多个页面中搜索新工作、检查特定工作要求和薪资范围等,如果您手动进行,可能需要大约 20 分钟。幸运的是,所有这一切都可以通过几行代码自动完成。
  在这个项目中,你应该创建一个机器人,它会抓取一个工作门户来获取特定工作的要求和薪水。您可以在本项目中使用 Beautiful Soup 或 Selenium,但方法会因您使用的库而异。
  如果您使用 Beautiful Soup,请只关注收录您要抓取的最终数据的页面。您可以按照此视频教程来帮助您开始此项目。
  话虽如此,我建议您使用Selenium,因为您可以在网站 上自由执行更多操作。最棒的是你可以在每次操作后运行代码,并在浏览器中查看机器人执行的步骤。要使用 Selenium 解决此问题,请考虑从您最喜欢的工作门户获取数据通常会遵循的所有步骤。
  例如,访问网站,写下职位名称,单击搜索按钮,然后浏览每个职位发布以提取任何相关信息。之后,使用 Selenium 库在 Python 中复制这些步骤。
  四、Grab 商品价格:获得最优惠的价格
  如果您想为特定商品找到最优惠的价格,购物可能会变得非常耗时。在网站 上找到汽车、电视和衣服的最优惠价格可能需要几个小时;幸运的是,您需要几分钟时间才能完成我们的下一个网络抓取项目。
  这是本文列出的最高级的项目,分为两部分。首先,去你最喜欢的网上商店,采集产品名称、价格、折扣和链接等数据,以便你以后可以找到它们。我建议你在这个项目中使用 Scrapy 库,如果你打算爬很多页面,因为它是 Python 中最快的网络爬行库。您可以按照本教程来帮助您开始这个项目。
  对于项目的第二部分,您必须跟踪提取的价格,以便在特定产品的价格大幅下降时收到通知。
  请记住,您可以将最终项目的想法应用到您感兴趣的其他领域。举几个例子。
  一个。抓住股价
  B.把握投注赔率
  c.获取加密货币价格
  例如,我不是抓取产品价格,而是抓取投注赔率。想法是一样的,在多个博彩公司中找到最佳赔率。然后在赔率增加时收到通知。
  原文:
  云管理服务专家新钛云服务张纯译

动态网页抓取(前情介绍前段时间开发了一个功能,解决过程中遇到的问题)

网站优化优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2021-09-12 00:07 • 来自相关话题

  动态网页抓取(前情介绍前段时间开发了一个功能,解决过程中遇到的问题)
  前期情况介绍
  前段时间开发了一个函数,通过HttpClient访问某个页面,获取该页面的所有html内容;之后,抓取得到的整个页面显示在我的网页上;但是过了一段时间,网页升级了。网页中的图片变成了动态加载,无法通过HttpClient直接获取完整的页面内容。图片为懒加载状态,无法显示正确内容。
  解决方案
  由于没有办法直接抓取静态页面,可以尝试动态抓取页面;如何抓取动态页面?在本文中,Selenium 用于动态抓取页面。通过Selenium模拟正常打开浏览器浏览网页的过程,当浏览到页面底部加载整个页面时,此时抓取整个网页的内容就可以得到整个网页的内容时间。 Selenium 的 WebDriver 可以模拟不同的浏览器。本文使用 Chrome 浏览器。对于其他支持的浏览器,可以通过查看WebDriver的实现类得到答案。
  编码
  参考Selenium库的jar包
  
org.seleniumhq.selenium
selenium-java
3.141.59

复制代码
  因为要模拟Chrome浏览器,所以需要下载chromedriver。基础工作已经完成,接下来就是开发代码了。废话不多说,直接上代码。
  public String selenium(String url) throws InterruptedException {
// 设置 chromedirver 的存放位置
System.getProperties().setProperty("webdriver.chrome.driver", "D:/lingy/chromedriver_win32/chromedriver.exe");
// 设置无头浏览器,这样就不会弹出浏览器窗口
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
Long scrollSize = 1000L;
WebDriver webDriver = new ChromeDriver(chromeOptions);
webDriver.get(url);
//设置浏览器的宽高
Dimension dimension = new Dimension(1000, scrollSize.intValue());
webDriver.manage().window().setSize(dimension);
String html = "";
//获取JS执行器,可以执行js代码来控制页面
JavascriptExecutor driver_js= ((JavascriptExecutor) webDriver);
//获取页面的高度
Long scrollHeight = (Long) driver_js.executeScript("return document.body.scrollHeight");
logger.info("article hight is : {}",scrollHeight);
//因为要模拟鼠标滚动浏览网页的效果,所以设置了每次滚动的高度,然后通过整个页面的高度计算出股东的次数
Long loopNum = scrollHeight/scrollSize;
loopNum = loopNum+1;
logger.info("page need scroll times : {}",loopNum);
for(int i =0 ; i < loopNum; i++){
Long start = i*scrollSize;
Long end = (i+1)*scrollSize;
//根据滚动的次数,依次滚动页面,为了图片能加载完全,停留1秒钟
driver_js.executeScript("scroll("+start+","+end+")");
Thread.sleep(1000);
}
//返回页面全部内容
html = (String)driver_js.executeScript("return document.documentElement.outerHTML");
webDriver.close();
return html;
}
复制代码
  此时就可以完整的获取到整个页面的内容了,但是这种方式获取到的原创内容在我们自己的页面上可能无法很好的展示出来。以下是实际操作中遇到的两个问题。
  解决过程中遇到的问题
  在展示爬取内容的过程中,存在图片跨域展示或防盗链问题。最初的解决方案是使用Nginx反向代理来代理图片URL,但是因为源网页图片是防盗链或者其他原因,无法进行代理;所以我用了另一种方法,通过将图片转换成Base64格式的内容替换原来的URL来解决这个问题确实可以解决这个问题,但是会引入新的问题。图片转Base64后,原来的网页内容会变得非常大,存储和展示过程中的请求会消耗存储空间和请求。时间。最后选择本地读取图片,通过Nginx代理进行处理。
   //获取网页图片元素
List imgList = webDriver.findElements(By.tagName("img"));
// data:image/gif;base64,
for(WebElement img : imgList){
String imgSrc = img.getAttribute("src");
logger.info("img's src is : {}",imgSrc);
String pattern = "^((http)|(https)).*";
boolean imgSrcPattern = !StringUtils.isEmpty(imgSrc) && Pattern.matches(pattern, imgSrc);
if(imgSrcPattern){
// String strNetImageToBase64 = changImgUrlToBase64(imgSrc);
// driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", "data:image/png;base64,"+strNetImageToBase64);
String imgUrlToImgFile = changImgUrlToImgFile(imgSrc);
//通过JS来替换页面图片
driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", imgUrlToImgFile);
}
}
复制代码
  关键代码:driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", imgUrlToImgFile);
  图片转Base64代码
  图片下载到本地的代码
   private static String changImgUrlToImgFile(String imgSrc){
String suffix = ".png";
if(imgSrc.indexOf("gif") != -1){
suffix = ".gif";
}else if(imgSrc.indexOf("jpg") != -1){
suffix = ".jpg";
}else if(imgSrc.indexOf("jpeg") != -1){
suffix = ".jpeg";
}else if(imgSrc.indexOf("png") != -1){
suffix = ".png";
}
String dir = "E:/lingy/asmImg/";
String fileName = System.currentTimeMillis()+suffix;
try {
URL imgURL = new URL(imgSrc);
final HttpURLConnection conn = (HttpURLConnection) imgURL.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(3000);
InputStream is = conn.getInputStream();
File imgFile = new File(dir+fileName);
if(!imgFile.exists()){
imgFile.createNewFile();
}
// FileOutputStream fos = new FileOutputStream(imgFile);
// final byte[] by = new byte[1024];
// int len = -1;
// while ((len = is.read(by)) != -1) {
// fos.write(by, 0, len);
// }
// is.close();
// FileUtils.copyURLToFile(imgURL,imgFile);
FileUtils.copyInputStreamToFile(is,imgFile);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String imagRootPath = "http://localhost/asmImg/";
return imagRootPath + fileName;
}
复制代码
  解决过程中遇到的第二个问题
  在爬取页面的过程中,由于需要模拟网页滚动的效果(页面越长越费时),整个爬取非常耗时。当前端对响应时间有要求的时候,建议大家说说爬取页面的过程,做成异步的。
  总结
  Selenium 在自动化测试、模拟浏览器行为、操作页面元素等方面功能更强大,自动化测试领域更专业,这里不做深入讨论,只简单介绍下过程动态抓取一个。关键是获取页面元素和执行JS脚本,主要使用webDriver.findElements()和driver_js.executeScript()两个方法。由于以上介绍只是简单的尝试,在其他场景中会遇到更复杂的情况。比如有些页面需要点击才能显示全部内容,这就需要调用js来触发。以上就是本次解题的回顾,希望能给大家带来一些思路和帮助。 查看全部

  动态网页抓取(前情介绍前段时间开发了一个功能,解决过程中遇到的问题)
  前期情况介绍
  前段时间开发了一个函数,通过HttpClient访问某个页面,获取该页面的所有html内容;之后,抓取得到的整个页面显示在我的网页上;但是过了一段时间,网页升级了。网页中的图片变成了动态加载,无法通过HttpClient直接获取完整的页面内容。图片为懒加载状态,无法显示正确内容。
  解决方案
  由于没有办法直接抓取静态页面,可以尝试动态抓取页面;如何抓取动态页面?在本文中,Selenium 用于动态抓取页面。通过Selenium模拟正常打开浏览器浏览网页的过程,当浏览到页面底部加载整个页面时,此时抓取整个网页的内容就可以得到整个网页的内容时间。 Selenium 的 WebDriver 可以模拟不同的浏览器。本文使用 Chrome 浏览器。对于其他支持的浏览器,可以通过查看WebDriver的实现类得到答案。
  编码
  参考Selenium库的jar包
  
org.seleniumhq.selenium
selenium-java
3.141.59

复制代码
  因为要模拟Chrome浏览器,所以需要下载chromedriver。基础工作已经完成,接下来就是开发代码了。废话不多说,直接上代码。
  public String selenium(String url) throws InterruptedException {
// 设置 chromedirver 的存放位置
System.getProperties().setProperty("webdriver.chrome.driver", "D:/lingy/chromedriver_win32/chromedriver.exe");
// 设置无头浏览器,这样就不会弹出浏览器窗口
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
Long scrollSize = 1000L;
WebDriver webDriver = new ChromeDriver(chromeOptions);
webDriver.get(url);
//设置浏览器的宽高
Dimension dimension = new Dimension(1000, scrollSize.intValue());
webDriver.manage().window().setSize(dimension);
String html = "";
//获取JS执行器,可以执行js代码来控制页面
JavascriptExecutor driver_js= ((JavascriptExecutor) webDriver);
//获取页面的高度
Long scrollHeight = (Long) driver_js.executeScript("return document.body.scrollHeight");
logger.info("article hight is : {}",scrollHeight);
//因为要模拟鼠标滚动浏览网页的效果,所以设置了每次滚动的高度,然后通过整个页面的高度计算出股东的次数
Long loopNum = scrollHeight/scrollSize;
loopNum = loopNum+1;
logger.info("page need scroll times : {}",loopNum);
for(int i =0 ; i < loopNum; i++){
Long start = i*scrollSize;
Long end = (i+1)*scrollSize;
//根据滚动的次数,依次滚动页面,为了图片能加载完全,停留1秒钟
driver_js.executeScript("scroll("+start+","+end+")");
Thread.sleep(1000);
}
//返回页面全部内容
html = (String)driver_js.executeScript("return document.documentElement.outerHTML");
webDriver.close();
return html;
}
复制代码
  此时就可以完整的获取到整个页面的内容了,但是这种方式获取到的原创内容在我们自己的页面上可能无法很好的展示出来。以下是实际操作中遇到的两个问题。
  解决过程中遇到的问题
  在展示爬取内容的过程中,存在图片跨域展示或防盗链问题。最初的解决方案是使用Nginx反向代理来代理图片URL,但是因为源网页图片是防盗链或者其他原因,无法进行代理;所以我用了另一种方法,通过将图片转换成Base64格式的内容替换原来的URL来解决这个问题确实可以解决这个问题,但是会引入新的问题。图片转Base64后,原来的网页内容会变得非常大,存储和展示过程中的请求会消耗存储空间和请求。时间。最后选择本地读取图片,通过Nginx代理进行处理。
   //获取网页图片元素
List imgList = webDriver.findElements(By.tagName("img"));
// data:image/gif;base64,
for(WebElement img : imgList){
String imgSrc = img.getAttribute("src");
logger.info("img's src is : {}",imgSrc);
String pattern = "^((http)|(https)).*";
boolean imgSrcPattern = !StringUtils.isEmpty(imgSrc) && Pattern.matches(pattern, imgSrc);
if(imgSrcPattern){
// String strNetImageToBase64 = changImgUrlToBase64(imgSrc);
// driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", "data:image/png;base64,"+strNetImageToBase64);
String imgUrlToImgFile = changImgUrlToImgFile(imgSrc);
//通过JS来替换页面图片
driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", imgUrlToImgFile);
}
}
复制代码
  关键代码:driver_js.executeScript("arguments[0].setAttribute(arguments[1],arguments[2])", img, "src", imgUrlToImgFile);
  图片转Base64代码
  图片下载到本地的代码
   private static String changImgUrlToImgFile(String imgSrc){
String suffix = ".png";
if(imgSrc.indexOf("gif") != -1){
suffix = ".gif";
}else if(imgSrc.indexOf("jpg") != -1){
suffix = ".jpg";
}else if(imgSrc.indexOf("jpeg") != -1){
suffix = ".jpeg";
}else if(imgSrc.indexOf("png") != -1){
suffix = ".png";
}
String dir = "E:/lingy/asmImg/";
String fileName = System.currentTimeMillis()+suffix;
try {
URL imgURL = new URL(imgSrc);
final HttpURLConnection conn = (HttpURLConnection) imgURL.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(3000);
InputStream is = conn.getInputStream();
File imgFile = new File(dir+fileName);
if(!imgFile.exists()){
imgFile.createNewFile();
}
// FileOutputStream fos = new FileOutputStream(imgFile);
// final byte[] by = new byte[1024];
// int len = -1;
// while ((len = is.read(by)) != -1) {
// fos.write(by, 0, len);
// }
// is.close();
// FileUtils.copyURLToFile(imgURL,imgFile);
FileUtils.copyInputStreamToFile(is,imgFile);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String imagRootPath = "http://localhost/asmImg/";
return imagRootPath + fileName;
}
复制代码
  解决过程中遇到的第二个问题
  在爬取页面的过程中,由于需要模拟网页滚动的效果(页面越长越费时),整个爬取非常耗时。当前端对响应时间有要求的时候,建议大家说说爬取页面的过程,做成异步的。
  总结
  Selenium 在自动化测试、模拟浏览器行为、操作页面元素等方面功能更强大,自动化测试领域更专业,这里不做深入讨论,只简单介绍下过程动态抓取一个。关键是获取页面元素和执行JS脚本,主要使用webDriver.findElements()和driver_js.executeScript()两个方法。由于以上介绍只是简单的尝试,在其他场景中会遇到更复杂的情况。比如有些页面需要点击才能显示全部内容,这就需要调用js来触发。以上就是本次解题的回顾,希望能给大家带来一些思路和帮助。

官方客服QQ群

微信人工客服

QQ人工客服


线