1.引言
现在随着python火热,学爬虫的人不计其数,防爬虫的手段层出不穷,但防爬虫无非通过3种手段,1.后台限制IP访问次数,这个可以通过使用代理IP破解,2.检测访问来源数据,判定是否是爬虫还是机器人,3.数据传输加密,不在明文传输数据,通过js加密,在加密js文件,或者直接把数据封装成图片等其他格式,不让用户获取到数据本身。
针对第2、3点,这里就实现通过在程序里面嵌入一个开源Chromium,去破解所有的js加密和访问来源限制,达到抓取数据的目的
2.CefSharp安装
详见https://blog.csdn.net/c0411034/article/details/82841696
3.爬取数据
爬取数据,主要是分析后台获取到网络包的内容,就像使用chrome浏览器F12键打开调试器,选择NETWORK一样,你可以从中截取到所有的网络包
截取数据,需要实现CefSharp.Handler.DefaultRequestHandler类,并复写操作方法。
public class RequestHandler_new : CefSharp.Handler.DefaultRequestHandler
{
private Dictionary<UInt64, MemoryStreamResponseFilter> responseDictionary = new Dictionary<UInt64, MemoryStreamResponseFilter>();
public IRequestHandler _requestHeandler;
public RequestHandler_new(IRequestHandler rh) : base()
{
_requestHeandler = rh;
}
public override CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
var url = new Uri(request.Url);
var extension = url.ToString().ToLower();
if (request.ResourceType ==
ResourceType.Image || extension.EndsWith(".jpg")
|| extension.EndsWith(".png")
|| extension.EndsWith(".gif")
|| extension.EndsWith(".jpeg")
)
{
//这里是过滤掉不想要的数据,如图片资源,避免加载时间过长
return CefReturnValue.Cancel;
}
if (Uri.TryCreate(request.Url, UriKind.Absolute, out url) == false