
import javaawt;
import javaawtevent;
import javaio;
import javanet;
import javautil;
import javautilregex;
import javaxswing;
import javaxswingtable;//一个Web的爬行者(注:爬行在这里的意思与抓取,捕获相同)
public class SearchCrawler extends JFrame{
//最大URL保存值
private static final String[] MAX_URLS={"50","100","500","1000"};
//缓存robot禁止爬行列表
private HashMap disallowListCache=new HashMap();
//搜索GUI控件
private JTextField startTextField;
private JComboBox maxComboBox;
private JCheckBox limitCheckBox;
private JTextField logTextField;
private JTextField searchTextField;
private JCheckBox caseCheckBox;
private JButton searchButton;
//搜索状态GUI控件
private JLabel crawlingLabel2;
private JLabel crawledLabel2;
private JLabel toCrawlLabel2;
private JProgressBar progressBar;
private JLabel matchesLabel2;
//搜索匹配项表格列表
private JTable table;
//标记爬行机器是否正在爬行
private boolean crawling;
//写日志匹配文件的引用
private PrintWriter logFileWriter;
//网络爬行者的构造函数
public SearchCrawler(){
//设置应用程序标题栏
setTitle("搜索爬行者");
//设置窗体大小
setSize(600,600);
//处理窗体关闭事件
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
actionExit();
}
});
//设置文件菜单
JMenuBar menuBar=new JMenuBar();
JMenu fileMenu=new JMenu("文件");
fileMenusetMnemonic(KeyEventVK_F);
JMenuItem fileExitMenuItem=new JMenuItem("退出",KeyEventVK_X);
fileExitMenuItemaddActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
actionExit();
}
});
fileMenuadd(fileExitMenuItem);
menuBaradd(fileMenu);
setJMenuBar(menuBar);
1、如果是定向爬取几个页面,做一些简单的页面解析,爬取效率不是核心要求,那么用什么语言差异不大。
当然要是页面结构复杂,正则表达式写得巨复杂,尤其是用过那些支持xpath的类库/爬虫库后,就会发现此种方式虽然入门门槛低,但扩展性、可维护性等都奇差。因此此种情况下还是推荐采用一些现成的爬虫库,诸如xpath、多线程支持还是必须考虑的因素。
2、如果是定向爬取,且主要目标是解析js动态生成的内容
此时候,页面内容是有js/ajax动态生成的,用普通的请求页面->解析的方法就不管用了,需要借助一个类似firefox、chrome浏览器的js引擎来对页面的js代码做动态解析。
此种情况下,推荐考虑casperJS+phantomjs或slimerJS+phantomjs ,当然诸如selenium之类的也可以考虑。
3、如果爬虫是涉及大规模网站爬取,效率、扩展性、可维护性等是必须考虑的因素时候
大规模爬虫爬取涉及诸多问题:多线程并发、I/O机制、分布式爬取、消息通讯、判重机制、任务调度等等,此时候语言和所用框架的选取就具有极大意义了。
PHP对多线程、异步支持较差,不建议采用。
NodeJS:对一些垂直网站爬取倒可以,但由于分布式爬取、消息通讯等支持较弱,根据自己情况判断。
Python:强烈建议,对以上问题都有较好支持。尤其是Scrapy框架值得作为第一选择。优点诸多:支持xpath;基于twisted,性能不错;有较好的调试工具;
此种情况下,如果还需要做js动态内容的解析,casperjs就不适合了,只有基于诸如chrome V8引擎之类自己做js引擎。
至于C、C++虽然性能不错,但不推荐,尤其是考虑到成本等诸多因素;对于大部分公司还是建议基于一些开源的框架来做,不要自己发明轮子,做一个简单的爬虫容易,但要做一个完备的爬虫挺难的。
具体内容可以参考 一个任务调度分发服务的架构
1、收集数据
python爬虫程序可用于收集数据。这也是最直接和最常用的方法。由于爬虫程序是一个程序,程序运行得非常快,不会因为重复的事情而感到疲倦,因此使用爬虫程序获取大量数据变得非常简单和快速。
由于99%以上的网站是基于模板开发的,使用模板可以快速生成大量布局相同、内容不同的页面。因此,只要为一个页面开发了爬虫程序,爬虫程序也可以对基于同一模板生成的不同页面进行爬取内容。
2、调研
比如要调研一家电商公司,想知道他们的商品销售情况。这家公司声称每月销售额达数亿元。如果你使用爬虫来抓取公司网站上所有产品的销售情况,那么你就可以计算出公司的实际总销售额。此外,如果你抓取所有的评论并对其进行分析,你还可以发现网站是否出现了刷单的情况。数据是不会说谎的,特别是海量的数据,人工造假总是会与自然产生的不同。过去,用大量的数据来收集数据是非常困难的,但是现在在爬虫的帮助下,许多欺骗行为会赤裸裸地暴露在阳光下。
3、刷流量和秒杀
刷流量是python爬虫的自带的功能。当一个爬虫访问一个网站时,如果爬虫隐藏得很好,网站无法识别访问来自爬虫,那么它将被视为正常访问。结果,爬虫“不小心”刷了网站的流量。
除了刷流量外,还可以参与各种秒杀活动,包括但不限于在各种电商网站上抢商品,优惠券,抢机票和火车票。目前,网络上很多人专门使用爬虫来参与各种活动并从中赚钱。这种行为一般称为“薅羊毛”,这种人被称为“羊毛党”。不过使用爬虫来“薅羊毛”进行盈利的行为实际上游走在法律的灰色地带,希望大家不要尝试。
什么是网络爬虫?
网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件
爬虫有什么用?
做为通用搜索引擎网页收集器。(google,baidu)
做垂直搜索引擎
科学研究:在线人类行为,在线社群演化,人类动力学研究,计量社会学,复杂网络,数据挖掘,等领域的实证研究都需要大量数据,网络爬虫是收集相关数据的利器。
偷窥,hacking,发垃圾邮件
爬虫是搜索引擎的第一步也是最容易的一步
网页搜集
建立索引
查询排序
用什么语言写爬虫?
C,C++。高效率,快速,适合通用搜索引擎做全网爬取。缺点,开发慢,写起来又臭又长,例如:天网搜索源代码。
脚本语言:Perl,Python,Java,Ruby。简单,易学,良好的文本处理能方便网页内容的细致提取,但效率往往不高,适合对少量网站的聚焦爬取
C#?(貌似信息管理的人比较喜欢的语言)
什么最终选择Python?
跨平台,对Linux和windows都有不错的支持。
科学计算,数值拟合:Numpy,Scipy
可视化:2d:Matplotlib(做图很漂亮),3d:Mayavi2
复杂网络:Networkx
统计:与R语言接口:Rpy
交互式终端
一个简单的Python爬虫
importurllib
import
urllibrequest
'''
小编准备的python爬虫学习资料,加群:821460695即可免费获取!
'''
defloadPage(url,filename):
\"\"\"
作用:根据url发送请求,获取html数据;
:paramurl:
:return:
\"\"\"
request=urllibrequestRequest(url)
html1=urllibrequesturlopen(request)read()
returnhtml1decode('utf-8')
defwritePage(html,filename):
\"\"\"
作用将html写入本地
:paramhtml:服务器相应的文件内容
:return:
\"\"\"
withopen(filename,'w')asf:
fwrite(html)
print('-'30)
deftiebaSpider(url,beginPage,endPage):
\"\"\"
作用贴吧爬虫调度器,负责处理每一个页面url;
:paramurl:
:parambeginPage:
:paramendPage:
:return:
\"\"\"
forpageinrange(beginPage,endPage+1):
pn=(page-1)50
fullurl=url+\"&pn=\"+str(pn)
print(fullurl)
filename='第'+str(page)+'页html'
html=loadPage(url,filename)
writePage(html,filename)
if__name__==\"__main__\":
kw=input('请输入你要需要爬取的贴吧名:')
beginPage=int(input('请输入起始页'))
endPage=int(input('请输入结束页'))
url='f'
kw1={'kw':kw}
key=urllibparseurlencode(kw1)
fullurl=url+key
tiebaSpider(fullurl,beginPage,endPage)
没写过爬虫的人可能会被一些以讹传讹的消息所误导,以为爬虫就是搜资源,或是破解网站。
其实爬虫只是用几个普普通通的可以访问网站的函数去访问对方网站,然后利用编程语言的各种功能,对网站返回的各种信息进行筛选,从中找出自己需要的信息罢了。
不是只有python可以做爬虫,只是python用着简单,所以用python写爬虫的人多。每一个带有访问互联网功能的编程语言,都可以做爬虫。
学一下爬虫常用的两个库(一个发网络请求的requsets库,一个对网页返回的信息进行分类的BeautifulSoup),学会用那几个函数。如果你能掌握学习方法,而且不要沉迷于研究那两个库里究竟有些啥,而且不要沉迷于理解那几个函数不同的参数究竟有什么功能,半小时就能学完这两个库,然后开始写爬虫。
当然,写爬虫还需要了解一些html的知识(你还没学,可能无法理解这是啥)
这时已经可以开始做一些,例如爬取新闻网站的新闻,下载网站的,这些基础的爬虫了。每个网站的制作者都有自己不同的想法,都有自己的反爬策略,没法一概而论。
至于破解爱奇艺这些网站的视频,抱歉,这不是爬虫自带的功能,爬虫自带的功能就只有访问互联网,并在网站返回的数据里方便的寻找东西
以上就是关于用java编写 网络爬虫求代码和流程 急全部的内容,包括:用java编写 网络爬虫求代码和流程 急、如何使用nodejs做爬虫程序、python爬虫技术能干什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)