java爬虫抓取动态网页(一下栗子:我对爬与反爬的关系的理解 )
优采云 发布时间: 2021-10-08 07:01java爬虫抓取动态网页(一下栗子:我对爬与反爬的关系的理解
)
写之前先说说我对爬行和反爬关系的理解
一、什么是爬虫
Crawler 英文是spliter,意思是蜘蛛。网络爬虫系统的功能是下载网页数据,并对所需数据进行采集。主体是根据初始超链接下载并解析目标页面。这时候有两件事,一是继续往容器中添加相关的超链接,二是解析页面的目标数据,一直循环下去,直到没有url解析出来。举个栗子:我要爬苏宁手机价格数据。爬取的思路是获取第一页的URL作为蜘蛛网的中心点,爬取当前页的手机详情页的价格信息和下一页的URL。并将其添加到容器中,这样只要将url容器存储在循环中,会继续机械执行,直到最后一页没有下一页为止。这是一个扩散的过程。
二、什么是反爬虫,为什么应该是
反爬虫就是根据请求的某些访问特性进行特殊的处理,比如屏蔽IP、轰炸验证码、返回非对应信息等。
反爬大概有几个原因
1、爬虫占了很高的总PV值,相当于一大群僵尸用户访问你的网站。如果不加以控制,只会浪费服务器资源。
2、有些人因为商业竞争问题必须反爬,防止自己的商业信息被竞争对手批量获取。我看到了一个非常合适的例子。对外卖了两个产品,一个家庭写了一个脚本,自动爬取对手的网站产品价格并与自己的产品价格进行比较,并保持在一定价格以下进行动态波动。买之前一定要了解同行业的价格,所以大家都知道结果。对方很快就发现了这里的连队手脚,一场激烈的攀爬和反攀爬比赛开始了。
3、还有一些无人认领的爬虫。可能使用它们的人都忘记了它的存在,一直在艰难地爬行。
三、一些常见的防爬方法
1、 根据IP访问频率和IP数量上限,用户每秒访问页面数十次或每半秒一次,持续数小时。动作明显,封堵结束。
2、 页面加载时也有动态访问,而不是静态数据。比如动态加载一些董的价格信息
3、还有,主页面是异步加载的,嵌套在iframe中,src="about:blank",这个正常下载的页面没有内容
4、 故意挖洞,在页面上做一些隐藏的链接。如果访问明显是爬虫爬进来的,下一步就是拦截
5、 后端查询统计并对userAgent进行阈值判断。这个据说容易误伤
6、 页面展示也有花样,部分价格信息用图片展示。去哪儿网
7、Cookie 反扒,推荐链接,有很好的介绍入口
四、 破解前三个
1.设置ip池周期循环访问
首先,我们从诸如 Xisui 网站 等代理那里获取一些免费 ip,其次,我们执行无效 ip 过滤。此步骤视情况而定。我个人的做法是Xisci网络上的ip有时可以访问有时无效,所以我只是去掉过滤步骤,然后使用这些代理ip进行实际访问。
<p>public class CsdnReadCount implements PageProcessor {
// IP地址代理库Map
private static Map IPProxyRepository = new HashMap();
private static List keysArray = new ArrayList();
private static int index;
private Site site = Site
.me()
.setDomain("http://www.xicidaili.com/")
.setSleepTime(3000).setUserAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36");
//按照顺序获取一个ip
public static HttpHost getRandomProxy() {
// 随机获取host:port,并构建代理对象
String host = keysArray.get(index);
if(index