其他分享
首页 > 其他分享> > 浅谈网路爬虫

浅谈网路爬虫

作者:互联网

什么是网络爬虫?


图片

爬虫,又称为网页蜘蛛(spider),就是能够在互联网中检索自己需要的信息的程序或脚本。


爬虫,简单的说就是一个http(https)请求,获取到对面网页的源码,然后从网页的源码中抓取自己需要的信息。而html代码的规则是基于xml的,所以可以通过一定解析规则和逻辑完成我们的数据。

爬虫能干什么

爬虫能干的事情比较多,并且有些领域和爬虫都有很大的关联。不同深度,技术的爬虫工作者能干的事情也不同。

搜索引擎


图片


抢票、刷票等自动化软件


图片


部分破解软件

金融等行业数据挖掘、分析数据来源

其他

爬虫很简单


图片

就拿一个csdn的个人主页来说https://blog.csdn.net/qq_40693171

图片


语言的选择

对于python爬虫常用的库有

名称主要功能依赖
requests负责网页请求,代理等处理,封装urllib2(用起来麻烦)等库,使得操作简化。不需要考虑编码、解码等较麻烦的问题pip install requests
Beautifulsoup非常好用的dom解析器,还有css选择器。匹配正则等,而选用lxml当做解析pip install bs4,pip install lxml
xpath解析效率最高,和BeautifulSoup可以选择一个学习即可pip install lxml
re正则库,很多特殊匹配需要正则来完成内置
Senlenuim/ChromeDriver+PhantomJS模拟浏览器行为,执行点击事件,简单粗暴,但是速度慢需要安装对应库和对应驱动

至于框架,scrapy流行。就不介绍 对于java爬虫常用的库有

名称主要功能
HttpURLConnectionjava.net下包。很多其他包都基于此包进行封装
HttpClient基于 HttpURLConnection进行封装,更加友好的解决参数,Cookie,Session等问题。
jsoup基于HttpClient进行封装,更加方便的发送请求。此外jsoup的另一个重大功能就是他是一个非常良好的dom解析器。使用起来非常简单。
Senlenuim+PhantomJS解决动态渲染解析不了的问题,同上

至于框架,java的框架比较多,但是流行度却没python的scrapy高。自己可以查询各种框架进行对比。当然自己也可以使用spring+mybatis进行封装。如果项目比较大。

两种语言的小demo

对于上面的主页,如果用python来完成数据提取

import requests
from bs4 import BeautifulSoup

url='https://blog.csdn.net/qq_40693171'
req=requests.get(url)
res=req.text#html 源码
soup=BeautifulSoup(res,'lxml')#转为bea--对象
node=soup.find(id='mainBox').find_all(attrs={'class':'article-item-box'})
for link in node:
   value=link.h4
   print(value.text)

运行结果

图片

如果用java来完成


package com.bigsai;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;

public class test {
   public static void main(String[] args) throws IOException {
       String url="https://blog.csdn.net/qq_40693171";
       Document doc= Jsoup.connect(url).get();
       Elements elements=doc.getElementById("mainBox").select(".article-item-box");
       for(Element element:elements)
       {
           Element node=element.select("h4").get(0);
           System.out.println(node.text());
       }
   }
}

运行结果

图片


这样,一个简单的爬虫就完成了。是否勾起你对爬虫的兴趣?

爬虫也不简单

爬虫与反爬虫的斗争由此开始。

ip、浏览器头(User-Agent)、和cookie限制


图片

一个http请求要携带很多头信息带给后台,后台也能够获取这些信息。那百度的首页打开F12刷新

图片


需登录的验证码限制、参数限制


图片

有很多数据是开放可以查看的,但是也有很多数据需要注册登录之后才能查看数据的,比如国内的各大招聘网站都需要你先登录然后才能爬取。


图片 图片

对于普通验证码来说,你大致有四个选择。

  1. 绕过验证码,直接手动登录用网站,复制cookie放到请求的去抓取数据。这种最不智能也是最简单的方法。(pandownload就是内置一个浏览器driver然后你手动登录后它获取你的cookie信息然后一波操作)

  2. 将验证码下载到本地(应用),让用户识别填写然后登录。

  3. 通过人工智能和数字图像相关技术,提前训练好验证码识别模型,在遇到验证码时候执行程序识别。对于简单的验证码识别。也有不少开源作品。

  4. 通过打码平台,让第三方专业打码。

而对于滑块以及其他奇葩如滑块,点选等等,那你要么借助第三方,要么就是自己研究其中js运转流程。以及交付方式。算法原理,还是很复杂的。笔者这部分也不是特别了解。只是略知一二。

不仅如此,在登录环节,往往还会遇到一些其他参数的会放到JavaScript里面,这需要你抓到比较。有的还会针对你的数据进行加密传到后台。这就需要你娴熟的js解密能力了。

JavaScript渲染/ajax加密

爬虫知识储备路线

虽然一些高难度的爬虫确实很难,没有一定的工作经验和时间研究确实很难变强。但是我们还是能够通过掌握一些大众知识能够满足生活、学习的日常需求和创意。

1.基础语法:

2.正则和爬虫相关库,以及浏览器F12抓包和Fidder等抓包工具抓包

3.扎实的语法

4. 多线程、数据库、线程安全相关知识。

5. 分布式的概念和知识。

6. js进阶、逆向等知识.

总结


图片


另外,如果文章有说的不好的地方还请大佬指出。我也写过一些爬虫和笔记。如果需要可以参考

Python爬虫

github爬虫代码和资料https://github.com/javasmall/python 在github上有个爬虫学习资料,gitbook格式感觉很喜欢。大佬可以star下。

图片


标签:需要,java,浅谈,python,爬虫,cookie,数据,网路
来源: https://blog.51cto.com/15018708/2618730