爬虫遇到各种不同url怎么爬取

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫遇到各种不同url怎么爬取相关的知识,希望对你有一定的参考价值。

参考技术A 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。  传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。对于垂直搜索来说,聚焦爬虫,即有针对性地爬取特定主题网页的爬虫,更为适合。  以下是一个使用java实现的简单爬虫核心代码:  publicvoidcrawl()throwsThrowablewhile(continueCrawling())CrawlerUrlurl=getNextUrl();//获取待爬取队列中的下一个URLif(url!=null)printCrawlInfo();Stringcontent=getContent(url);//获取URL的文本信息//聚焦爬虫只爬取与主题内容相关的网页,这里采用正则匹配简单处理if(isContentRelevant(content,this.regexpSearchPattern))saveContent(url,content);//保存网页至本地//获取网页内容中的链接,并放入待爬取队列中CollectionurlStrings=extractUrls(content,url);addUrlsToUrlQueue(url,urlStrings);elseSystem.out.println(url+"isnotrelevantignoring");//延时防止被对方屏蔽Thread.sleep(this.delayBetweenUrls);closeOutputStream();privateCrawlerUrlgetNextUrl()throwsThrowableCrawlerUrlnextUrl=null;while((nextUrl==null)&&(!urlQueue.isEmpty()))CrawlerUrlcrawlerUrl=this.urlQueue.remove();//doWeHavePermissionToVisit:是否有权限访问该URL,友好的爬虫会根据网站提供的"Robot.txt"中配置的规则进行爬取//isUrlAlreadyVisited:URL是否访问过,大型的搜索引擎往往采用BloomFilter进行排重,这里简单使用HashMap//isDepthAcceptable:是否达到指定的深度上限。爬虫一般采取广度优先的方式。一些网站会构建爬虫陷阱(自动生成一些无效链接使爬虫陷入死循环),采用深度限制加以避免if(doWeHavePermissionToVisit(crawlerUrl)&&(!isUrlAlreadyVisited(crawlerUrl))&&isDepthAcceptable(crawlerUrl))nextUrl=crawlerUrl;//System.out.println("Nexturltobevisitedis"+nextUrl);returnnextUrl;privateStringgetContent(CrawlerUrlurl)throwsThrowable//HttpClient4.1的调用与之前的方式不同HttpClientclient=newDefaultHttpClient();HttpGethttpGet=newHttpGet(url.getUrlString());StringBufferstrBuf=newStringBuffer();HttpResponseresponse=client.execute(httpGet);if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode())HttpEntityentity=response.getEntity();if(entity!=null)BufferedReaderreader=newBufferedReader(newInputStreamReader(entity.getContent(),"UTF-8"));Stringline=null;if(entity.getContentLength()>0)strBuf=newStringBuffer((int)entity.getContentLength());while((line=reader.readLine())!=null)strBuf.append(line);if(entity!=null)nsumeContent();//将url标记为已访问markUrlAsVisited(url);returnstrBuf.toString();publicstaticbooleanisContentRelevant(Stringcontent,PatternregexpPattern)booleanretValue=false;if(content!=null)//是否符合正则表达式的条件Matcherm=regexpPattern.matcher(content.toLowerCase());retValue=m.find();returnretValue;publicListextractUrls(Stringtext,CrawlerUrlcrawlerUrl)MapurlMap=newHashMap();extractHttpUrls(urlMap,text);extractRelativeUrls(urlMap,text,crawlerUrl);returnnewArrayList(urlMap.keySet());privatevoidextractHttpUrls(MapurlMap,Stringtext)Matcherm=(text);while(m.find())Stringurl=m.group();String[]terms=url.split("ahref=\"");for(Stringterm:terms)//System.out.println("Term="+term);if(term.startsWith("http"))intindex=term.indexOf("\"");if(index>0)term=term.substring(0,index);urlMap.put(term,term);System.out.println("Hyperlink:"+term);privatevoidextractRelativeUrls(MapurlMap,Stringtext,CrawlerUrlcrawlerUrl)Matcherm=relativeRegexp.matcher(text);URLtextURL=crawlerUrl.getURL();Stringhost=textURL.getHost();while(m.find())Stringurl=m.group();String[]terms=url.split("ahref=\"");for(Stringterm:terms)if(term.startsWith("/"))intindex=term.indexOf("\"");if(index>0)term=term.substring(0,index);Strings=//"+host+term;urlMap.put(s,s);System.out.println("Relativeurl:"+s);publicstaticvoidmain(String[]args)tryStringurl="";QueueurlQueue=newLinkedList();Stringregexp="java";urlQueue.add(newCrawlerUrl(url,0));NaiveCrawlercrawler=newNaiveCrawler(urlQueue,100,5,1000L,regexp);//booleanallowCrawl=crawler.areWeAllowedToVisit(url);//System.out.println("Allowedtocrawl:"+url+""+//allowCrawl);crawler.crawl();catch(Throwablet)System.out.println(t.toString());t.printStackTrace();本回答被提问者采纳

python 爬网页 遇到重定向怎么处理

参考技术A
停止条件,这个你懂的,并重复上述过程,不断从当前页面上抽取新的URL放入队列.request模拟构建一个带cookies的浏览器。
2,先到微博登陆页面模拟登录,用来抓取微博内容,其实可以使用urllib、现有的项目
google
project网站有一个项目叫做sinawler1,可以找到一个参考的源码,从页面中找出所有URL,代码可以更加简短,获得初始网页上的URL、策略体系,省去对cookies的处理。
3。然后,抓取页面,选择满足要求的URL文本说明,直到满足要求退出,里面很多比较深入的内容。聚焦爬虫的工作流程较为复杂。网站上不去,比如算法分析,直到达到系统的某一条件时停止,就是专门的新浪微博爬虫。
4,需要根据一定的网页分析算法过滤与主题无关的链接,他是用python2写的,从理论角度提升代码的技术层次,保留有用的链接并将其放入等待抓取的URL队列。不过可以百度一下“python编写的新浪微博爬虫(现在的登陆方法见新的一则微博)“、网络爬虫基本原理
传统爬虫从一个或若干初始网页的URL开始。如果用python3写、设计基本思路
正如你所说,重复上面的抓取动作,模拟点击这些URL,它将根
据一定的搜索策略从队列中选择下一步要抓取的网页URL,会大有帮助

以上是关于爬虫遇到各种不同url怎么爬取的主要内容,如果未能解决你的问题,请参考以下文章

十年爬虫经验告诉你爬虫被封怎么办

python爬虫如何分析一个将要爬取的网站?

爬虫时IP被限制怎么解决?

如何爬取URL不变的网站内容

基于python的scrapy爬虫,关于增量爬取是怎么处理的

公司组建爬虫团队可以遇到的问题