python3 怎样爬取动态加载的网页信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3 怎样爬取动态加载的网页信息相关的知识,希望对你有一定的参考价值。

例如爬取https://mm.taobao.com/search_tstar_model.htm?spm=719.1001036.1998606017.2.WXHjyy

这边我的代码是:
#coding=utf-8
from bs4 import BeautifulSoup
import urllib.request

res = urllib.request.urlopen("https://mm.taobao.com/search_tstar_model.htm?spm=719.1001036.1998606017.2.WXHjyy")

html = res.read()
res.close()
str(html)
soup =BeautifulSoup(html,'html.parser')
# note that Python3 does not read the html code as string
# but as html code bytearray, convert to string with
photo=soup.select("div.lady-girls-wrap.tb_mm_main div.girls-list-wrap")

print(photo)

输出结果为:[<div class="girls-list-wrap">
<ul class="girls-list clearfix" id="J_GirlsList">
</ul>
<div class="load-wrap" id="J_LoadWrap">
<div class="error J_Error"><img src="//img.alicdn.com/tps/i4/T1oDKIXa8fXXXXXXXX-348-144.png"/></div>
<div class="loading J_Loading">数据加载中...</div>
</div>
</div>]

无法获取动态加载的数据,请问有没有大神知道怎样处理这种问题来爬取数据。

参考技术A 方法1

寻找页面中的xhr请求, 并得到实际的请求参数. 直接获取相关搜索的请求返回代码, 然后进行数据整理.

方法2

模拟浏览器操作, 比如使用Selenium 模块.本回答被提问者和网友采纳
参考技术B python爬虫比较难入门。
建议使用操作简单、功能强大的八爪鱼。

八爪鱼具有以下特点:
1、行业知名,全球300万+用户都在使用。
2、内置数百个主流网站采集模板,满足绝大部分采集需求,会鼠标点击以及文本输入即可采集数据。
3、可视化操作流程,眼见即可采(可采集市面上98%的网站),不管是图片电话,还是自媒体论坛,支持所有业务渠道的爬虫,满足各种采集需求。
4、云采集,5000台云服务器,24*7高效稳定采集,结合API可无缝对接内部系统,定期同步爬数据。
5、支持企业私有化部署,可部署在隔离内网环境。提供定制化部署方案,满足多种数据安全级别。

如何用JAVA爬取AJAX加载后的页面

普通的爬取是抓不了js的之后的数据的 可以用phantomjs或者htmlUnit实现
附上phantomjs示列代码
package cn.wang.utils;

import java.util.Random;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.CookieManager;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;

public class htmlUnitUtils

static WebClient webClient = null;

static Random random = new Random();

static
//1.创建对象
webClient = new WebClient(BrowserVersion.CHROME);
//2.设置参数
//启动js
webClient.getOptions().setJavaScriptEnabled(true);
//关闭css渲染
webClient.getOptions().setCssEnabled(false);
//启动重定向
webClient.getOptions().setRedirectEnabled(true);
//设置连接超时时间 ,这里是10S。如果为0,则无限期等待
webClient.getOptions().setTimeout(1000 * 15);
//启动cookie管理
webClient.setCookieManager(new CookieManager());
//启动ajax代理
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
//js运行时错误,是否抛出异常
webClient.getOptions().setThrowExceptionOnScriptError(false);
//设置浏览器请求信息
webClient.addRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
webClient.addRequestHeader("Accept-Encoding", "gzip, deflate");
webClient.addRequestHeader("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2");
webClient.addRequestHeader("Connection", "keep-alive");
webClient.addRequestHeader("Upgrade-Insecure-Requests", "1");


public static void runJs(String url)
try
webClient.addRequestHeader("User-Agent", Constant.useragents[random.nextInt(Constant.useragents.length)]);
//等待js渲染执行 waitime等待时间(ms)
webClient.waitForBackgroundJavaScript(1000 * 10);
//3.获取页面
webClient.getPage(url);
catch (Exception e)
e.printStackTrace();
finally
if(webClient != null)
webClient.close();




public static void main(String[] args)
runJs("http://www.gou.hk/");
System.setProperty("phantomjs.binary.path", "D:\\works\\tool\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");


参考技术A 分情况
一般简单的网页通过get参数进行分页 这种情况就通过构造url来进行分页
有些网站是通过post参数来进行分页,那就用代码post的相应的参数给网站
比较复杂的ajax的分页需要通过抓包来实现

以上是关于python3 怎样爬取动态加载的网页信息的主要内容,如果未能解决你的问题,请参考以下文章

自己写了一个爬虫,求教如何在网页上爬取动态加载的信息。

js的网页爬虫爬不到吗

爬取Ajax动态加载网页

Python网络爬虫_爬取Ajax动态加载和翻页时url不变的网页

Python爬虫学习——使用selenium和phantomjs爬取js动态加载的网页

如何用JAVA爬取AJAX加载后的页面