day76,爬虫03,Quartz定时器,corn定期时间表达式,代理服务器的使用,selenium+无头浏览器,爬京东数据的综合案例

爬虫框架webmagic模块构成:
Downloader:下载器
PageProcess:页面解析的业务逻辑
Pipeline:数据持久化。
Scheduler:url队列
课程计划:
爬虫的高级技术:
1)Quartz定时器
2)代理的使用
3)selenium+无头浏览器,实现动态爬虫
4)综合案例
二、定时器
1、Timer
2、Quartz:定时框架
功能强大,使用繁琐。
3、spring中使用定时
也是使用Quartz框架。
在Springboot框架中使用定时器:
1)@Scheduled
在需要定期执行的方法上添加此注解。
2)在Springboot的引导类
@EnableScheduling
4、需求,定时向控制台输出当前时间的代码:

//测试定时器用法的类
@Component
public class SchedulerTest {
   

    @Scheduled(
            //fixedDelay = 1000,固定延迟,固定延迟多长时间执行。long类型
            //fixedDelayString = "1000",固定延迟执行,同fixedDelay,数据类型是String类型。

            //fixedRate = 1000,固定周期执行
            //fixedRateString = "1000",字符串类型的值,使用方法同fixedRate
        
                //复杂的周期执行应该使用cron表达式:
                   // cron属性的值就是cron表达式,就是一个字符串。
                   // 在此注解中不支持年份,表达式只能是6段
                cron = "0/2 * * * * ? "
    )
    //每隔多少时间,输出一次当前时间。
    public void printTime() {
   
        System.out.println(new Date().toLocaleString());
    }
}
延时:如果上一个方法没有执行完,就等待。
周期:如果上一个方法没有执行完,也要立即执行。
@Scheduled
	fixedDelay:固定延迟,固定延迟多长时间执行。long类型
	fixedDelayString:固定延迟执行,同fixedDelay,数据类型是String类型。
	fixedRate:固定周期执行
	fixedRateString:字符串类型的值,使用方法同fixedRate
	复杂的周期执行应该使用cron表达式:
		cron属性的值就是cron表达式,就是一个字符串。
		在此注解中不支持年份,表达式只能是6段

2.3.corn表达式
cron的表达式是字符串,实际上是由七子表达式,描述个别细节的时间表。这些子表达式是分开的空白,代表:

  1. Seconds(秒)
  2. Minutes (分)
  3. Hours (时)
  4. Day-of-Month(一个月中的某一天)
  5. Month(月)
  6. Day-of-Week(一周中的星期几)
  7. Year (可选字段)(年)
    例 “0 0 12 ? * WED” 在每星期三下午12:00 执行,
    “*” 代表整个时间段

每一个字段都有一套可以指定有效值,如
Seconds (秒) :可以用数字0-59 表示,
Minutes(分) :可以用数字0-59 表示,
Hours(时) :可以用数字0-23表示,
Day-of-Month(天) :可以用数字1-31 中的任一一个值,但要注意一些特别的月份
Month(月) :可以用0-11 或用字符串:
JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
Day-of-Week(天) :可以用数字1-7表示(1 = 星期日)或用字符口串:
SUN, MON, TUE, WED, THU, FRI, SAT

“/”:为特别单位,表示为“每”如“0/15”表示每隔15分钟执行一次,“0”表示为从“0”分开始, “3/20”表示表示每隔20分钟执行一次,“3”表示从第3分钟开始执行
“?”:表示每月的某一天,或第周的某一天
“L”:用于每月,或每周,表示为每月的最后一天,或每个月的最后星期几如“6L”表示“每月的最后一个星期五”
最简单的生成方式,使用cron在线生成器:
http://cron.qqe2.com/

三、代理的使用
1、应用场景
防止服务器识别出爬虫。
2、获得代理服务器
可以找一些免费的代理服务器
米扑代理(推荐)
https://proxy.mimvp.com/free.php
西刺免费代理IP
http://www.xicidaili.com/
3、使用方法
在webmagic框架中使用代理。
应该创建一个Downloader对象,配置代理服务器。
1、创建一个PageProcessor对象。
2、创建一个Downloader对象,可以使用HttpClientDownloader
3、在Downloader对象中配置代理服务器。
4、使用Spider类组装爬虫。执行爬虫
5、使用代理,需要加额外的扩展jar

	<!--WebMagic扩展-->
<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-extension</artifactId>
    <version>0.7.3</version>
</dependency>
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.downloader.HttpClientDownloader;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.proxy.Proxy;
import us.codecraft.webmagic.proxy.ProxyProvider;
import us.codecraft.webmagic.proxy.SimpleProxyProvider;

public class MyPageProcessor implements PageProcessor {
   
    @Override
    public void process(Page page) {
   
        String html = page.getHtml().get();
        page.putField("html", html);
    }

    @Override
    public Site getSite() {
   
        return Site.me();
    }

    public static void main(String[] args) {
   
        //创建一个Downloader组件
        HttpClientDownloader downloader = new HttpClientDownloader();
        //在Downloader对象中配置代理服务器地址,设置代理的对象
        ProxyProvider proxyProvider = SimpleProxyProvider.from(
                new Proxy("117.191.11.109", 8080)
        );
        //为下载组件,赋予代理服务器对象
        downloader.setProxyProvider(proxyProvider);
        //使用Spider类组装爬虫
        Spider.create(new MyPageProcessor())
                //设置Downloader组件
                .setDownloader(downloader)
                .addUrl("http://www.itcast.cn")
                .start();
    }
}

四、使用selenium+无头浏览器
1、selenium
前端测试框架
java
.net
python
node.js

通过代码控制浏览器。

2、无头浏览器,就是没有图像界面的浏览器。也就是后台运行。
phantomjs:无头浏览器,不再更新。将来会被淘汰。(了解)
普通浏览器的无头浏览模式:
chrome(推荐使用)
Firefox
3、chrome
1)先安装chrome浏览器
2)然后安装chrome浏览器的驱动selenium的驱动,应该放到chrome浏览器所在的目录下。

注意:网上人说Selenium已经不再支持PhantomJS浏览器了推荐使用chrome或者Firefox来进行测试。这些文章大多都是使用python的文章,在java中还是可以使用的。当然在java中也可以使用chrome的无头模式或者的Firefox的无头模式。
如果使用Chrome需要下载对应版本的chromedriver驱动文件,具体版本参考:
https://www.cnblogs.com/JHblogs/p/7699951.html

3)编写代码
	1、向工程中添加jar包。selenium的jar包即可。
<dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.13.0</version>
        </dependency>
	2、创建浏览器的配置参数。
	3、创建一个WebDriver对象,代表浏览器。
	4、使用WebDriver对象控制浏览器。
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class ChromeTest {
   
    public static void main(String[] args) {
   
        //创建配置参数,并且设置无头浏览器驱动的名字和路径
        System.setProperty("webdriver.chrome.driver",
                "C:\\Program Files (x86
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值