【Java爬虫框架-webmagic的使用心得】

获取标签内的属性值

示例获取a内的 href值

  //a/@href

仅获取标签的文本,不要标签本身

在后续的高版本中,选择器仅提供了get()方法,当使用xpath时,会将连同标签本身一起输出,
例如

//span[@class='title']

这种会将<span>本身也输出,需要这样写:

//span[@class='title']/text()

然后是关于爬取动态渲染的数据

第一个方法就是 抓 ajax接口,直接拿到json数据
但是如果没有接口,数据是直接渲染的,就拿不到了,
那就要selenium-Java这种工具配合chrome或edge浏览器,需要下载driver包,具体可以在收藏里查看别人整理好的。
大概思路是,利用浏览器去打开渲染好的页面,再从页面里根据去爬取标签获得想要的内容。

selenium-Java 遇到的问题

1.第一个就是一直报403的问题,这个问题因为默认只能访问localhost的接口,解决办法是:

 System.setProperty("webdriver.chrome.whitelistedIps", "");

2.第二个问题是会弹出chrome窗口的问题,这个可以使用无头模式,加入设置:

 ArrayList<String> cliArgsCap = new ArrayList<String>();
        cliArgsCap.add("--web-security=false");
        cliArgsCap.add("--ssl-protocol=any");
        cliArgsCap.add("--ignore-ssl-errors=true");
        cliArgsCap.add("--remote-allow-origins=*");
        cliArgsCap.add("--headless");//无头模式
        ChromeOptions  chromeOptions = new ChromeOptions();
            chromeOptions.addArguments(cliArgsCap);

如果部署到linux上时,需要注意linux不同发行版支持的版本,可以从这个网站下载对应的chrome以及驱动,保持一致性,注意权限

https://sites.google.com/chromium.org/driver/downloads

由于linux的特殊性,options.addArguments(“–no-sandbox”); // 禁用沙箱(Linux必要)
3.第三个是 config.ini 的问题,如果导入的是webmagic集成的selenium,由于包里是写死的路径,所以不方便修改,参考了别人的做法,将源码下载并去掉了默认配置,鉴于Selenium 已经不再支持 PhantomJS,下载webmagic-selenium源码,然后修改剔除掉原有代码中对PhantomJS的使用,加入到自己的项目中使用即可。
4.集成到springboot中出现的依赖问题

通过 new 创建的 OrderInfoPipeline 实例不会被 Spring 容器管理,因此其中的 @Resource 注解不会生效
由于依赖注入没有生效,service 字段保持为 null,导致了 NullPointerException
解决方案是:
在 OrderCrawlerService 类中通过 @Resource 注入 Spring 管理的 OrderInfoPipeline 实例
在 ErpPurchaseInServiceImpl 类中添加了 @Override 注解,确保方法签名正确
确保接口和实现类中的方法名称一致
这样,Spring 容器会正确管理所有的依赖关系,确保 OrderInfoPipeline 中的 service 字段被正确注入,从而避免 NullPointerException。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值