
如果你的网站页面经常更新,爬虫就会更加频繁的访问页面,优质的内容更是爬虫喜欢抓取的目标,尤其是原创内容。
如果你做了许多努力仍没有被爬虫抓取,可以看一下老渔哥给出的两点建议:
1、不建议站点使用js生成主体内容,如过js渲染出错,很可能导致页面内容读取错误,页面则无法被爬虫抓取。
2、许多站点会针对爬虫做优化,建议页面长度在128k之内,不要过长。
如果评论是通过AJAX显示的,那么抓取有一定难度。
你的爬虫需要能够解释JS,并解惑JS的内容。
但如果你只针对少数的网站进行抓取,则可以针对这些网站开发专用的蜘蛛。人工分析其JS,从中找到其获取评论的AJAX接口,然后抓之。这样简单。
还可以用爬虫 *** 作一个浏览器,通过浏览器的接口获取其运行完成后的显示的内容
//读取网页上的内容方法---------------------20100125 public String getOneHtml(String htmlurl) throws IOException {
URL url;
String temp;
final StringBuffer sb = new StringBuffer();
try {
url = new URL(htmlurl);
// 读取网页全部内容
final BufferedReader in = new BufferedReader(new InputStreamReader(
urlopenStream(),"GBK"));
while ((temp = inreadLine()) != null) {
sbappend(temp);
}
inclose();
} catch (final MalformedURLException me) {
Systemoutprintln("你输入的URL格式有问题!请仔细输入");
megetMessage();
} catch (final IOException e) {
eprintStackTrace();
}
return sbtoString();
}上面这个方法是根据你传入的url爬取整个网页的内容,然后你写个正则表达式去匹配这个字符串的内容。
网络上的公开信息大家都有权利获取,但并不意味着可以获取他人隐私,更不能将爬取的信息用于非法途径,出于学习、研究目的爬取一些企业公开信息是合法的,切记不可利用爬虫获取他人未授权的信息,比如你爬取企业网站展示的内容是无可非议的,但是爬取别人的网站后台就属非法了。别忘了爬虫学得好,牢饭吃到饱。不要用于非法目的,不要用于非法目的,不要用于非法目的,重要的事说三遍。望采纳
获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一。鉴于此,我拾起了Python这把利器,开启了网络爬虫之路。
本篇使用的版本为python35,意在抓取证券之星上当天所有A股数据。程序主要分为三个部分:网页源码的获取、所需内容的提取、所得结果的整理。
一、网页源码的获取
很多人喜欢用python爬虫的原因之一就是它容易上手。只需以下几行代码既可抓取大部分网页的源码。
import urllibrequest
url='arcom/stock/ranklist_a_3_1_1html' #目标网址headers={"User-Agent":"Mozilla/50 (Windows NT 100; WOW64)"} #伪装浏览器请求报头request=urllibrequestRequest(url=url,headers=headers) #请求服务器response=urllibrequesturlopen(request) #服务器应答content=responseread()decode('gbk') #以一定的编码方式查看源码print(content) #打印页面源码
虽说抓一页的源码容易,不过在一个网站内大量抓取网页源码却经常遭到服务器拦截,顿时感觉世界充满了恶意。于是我开始研习突破反爬虫限制的功法。
1伪装流浪器报头
很多服务器通过浏览器发给它的报头来确认是否是人类用户,所以我们可以通过模仿浏览器的行为构造请求报头给服务器发送请求。服务器会识别其中的一些参数来识别你是否是人类用户,很多网站都会识别User-Agent这个参数,所以请求头最好带上。有一些警觉性比较高的网站可能还会通过其他参数识别,比如通过Accept-Language来辨别你是否是人类用户,一些有防盗链功能的网站还得带上referer这个参数等等。
2随机生成UA
证券之星只需带User-Agent这个参数就可以抓取页面信息了,不过连续抓取几页就被服务器阻止了。于是我决定每次抓取数据时模拟不同的浏览器发送请求,而服务器通过User-Agent来识别不同浏览器,所以每次爬取页面可以通过随机生成不同的UA构造报头去请求服务器,
3减慢爬取速度
虽然模拟了不同浏览器爬取数据,但发现有的时间段可以爬取上百页的数据,有时候却只能爬取十来页,看来服务器还会根据你的访问的频率来识别你是人类用户还是网络爬虫。所以我每抓取一页都让它随机休息几秒,加入此句代码后,每个时间段都能爬取大量股票数据了。
4使用代理IP
天有不测风云,程序在公司时顺利测试成功,回寝室后发现又只能抓取几页就被服务器阻止了。惊慌失措的我赶紧询问度娘,获知服务器可以识别你的IP,并记录此IP访问的次数,可以使用高匿的代理IP,并在抓取的过程中不断的更换,让服务器无法找出谁是真凶。此功还未修成,欲知后事如何,请听下回分解。
5其他突破反爬虫限制的方法
很多服务器在接受浏览器请求时会发送一个cookie文件给浏览器,然后通过cookie来跟踪你的访问过程,为了不让服务器识别出你是爬虫,建议最好带上cookie一起去爬取数据;如果遇上要模拟登陆的网站,为了不让自己的账号被拉黑,可以申请大量的账号,然后再爬入,此处涉及模拟登陆、验证码识别等知识,暂时不再深究总之,对于网站主人来说,有些爬虫确实是令人讨厌的,所以会想出很多方法限制爬虫的进入,所以我们在强行进入之后也得注意些礼仪,别把人家的网站给拖垮了。
二、所需内容的提取
获取网页源码后,我们就可以从中提取我们所需要的数据了。从源码中获取所需信息的方法有很多,使用正则表达式就是比较经典的方法之一。我们先来看所采集网页源码的部分内容。
为了减少干扰,我先用正则表达式从整个页面源码中匹配出以上的主体部分,然后从主体部分中匹配出每只股票的信息。代码如下。
pattern=recompile('<tbody[\s\S]</tbody>')
body=refindall(pattern,str(content)) #匹配<tbody和</tbody>之间的所有代码pattern=recompile('>()<')
stock_page=refindall(pattern,body[0]) #匹配>和<之间的所有信息
其中compile方法为编译匹配模式,findall方法用此匹配模式去匹配出所需信息,并以列表的方式返回。正则表达式的语法还挺多的,下面我只罗列所用到符号的含义。
语法 说明
匹配任意除换行符“\n”外的字符
匹配前一个字符0次或无限次
? 匹配前一个字符0次或一次
\s 空白字符:[<空格>\t\r\n\f\v]
\S 非空白字符:[^\s]
[] 字符集,对应的位置可以是字符集中任意字符
() 被括起来的表达式将作为分组,里面一般为我们所需提取的内容
正则表达式的语法挺多的,也许有大牛只要一句正则表达式就可提取我想提取的内容。在提取股票主体部分代码时发现有人用xpath表达式提取显得更简洁一些,看来页面解析也有很长的一段路要走。
三、所得结果的整理
通过非贪婪模式()匹配>和<之间的所有数据,会匹配出一些空白字符出来,所以我们采用如下代码把空白字符移除。
stock_last=stock_total[:] #stock_total:匹配出的股票数据for data in stock_total: #stock_last:整理后的股票数据
if data=='':
stock_lastremove('')
最后,我们可以打印几列数据看下效果,代码如下
print('代码','\t','简称',' ','\t','最新价','\t','涨跌幅','\t','涨跌额','\t','5分钟涨幅')for i in range(0,len(stock_last),13): #网页总共有13列数据
print(stock_last[i],'\t',stock_last[i+1],' ','\t',stock_last[i+2],' ','\t',stock_last[i+3],' ','\t',stock_last[i+4],' ','\t',stock_last[i+5])
正规情况下可以用robots协议阻止搜索引擎爬取网站
但并不是所有的搜索引擎都遵循robots协议(某些知名搜索引擎也不遵守,该协议不是强制遵循的)
一般反爬虫的程序最简单的方法就是通过UserAgent识别爬虫,但并不是所有爬虫都有明确的UserAgent,还有些不知名的搜索引擎不设置自己独有的UserAgent,同时UserAgent也可以被任意的伪造,所以并不能保证完全过滤一些爬虫。
为了更进一步识别爬虫,只能通过限制某个IP的访问,如果IP在变化也很难阻止其爬行,仅能根据一些访问行为进行分析是否为爬虫自动抓取,如果是爬虫,则可以用一个403返回码阻止网页的显示。这样搜索引擎抓到的页面都是403错误页面,具体内容无法抓取。
如果有人专门想要抓取你的网站内容,它可以专门定制一种策略来想办法模拟人工访问,很难做到彻底阻止。
以上就是关于如何让网页被爬虫抓取全部的内容,包括:如何让网页被爬虫抓取、java 如何实现网络爬虫,爬取新闻评论,新闻内容可以获取,但是评论无法在网页源码显示。、用java写爬虫程序,有个网站获取不到链接,求指导等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)