最近在使用Python做网络爬虫,涉及到钓鱼网站的一些问题,或者说是使用Python爬取网站遇到的一些问题,Python语言中有很多强大的工具包,非常强大,在这里因为要爬取网页的内容,所以我选择的工具包为BeautifulSoup,一款强大的网页解析包。
1 爬取网页内容
page = urllib2.urlopen(url)
contents = page.read()
print(contents)
url 就是你爬取得网页地址:比如www.baidu.com
contents就是你爬取得网页的内容也就是网页源代码,以上三行代码就可以完成一个网页的爬取,很简单,通常来说很多网页都可以用这种方法来爬取,但是有时因为遇到网页屏蔽,这个就不行了。最近我在爬取PhishTank这个网址时,就遇到了这个问题,如下图:
解决方法通常有很多种:1 添加http请求头的内容 ;2 使用相关网站的API
在此我使用的是网站的API,以PhishTank网站做例子,在看了网站上的相关文档后,注册获得App key,根据开发文档,获得想要的内容------网站上所有的钓鱼网站的url
1 根据PhishTank网站的开发文档 url 应该写
http://data.phishtank.com/data/8bf7ccdbfb3eb4ad75996fe1d616efc4406f321cba361844b88402f3ee01c8cd/online-valid.csv
2 为了方便管理,我们把这些得到的url写入文件
page = urllib2.urlopen(url)
contents = page.read()
print(contents)
f = file("Content.txt" ,"w+" )
f.write(contents)
以上两步后,就能把PhishTank网站上的所有钓鱼网站的URL写入到文件中了。
3 获得这些URL所对应的网页内容
需要注意两点 3.1 有些URL对应的网页内容已经没有了,也就是404,3.2还有一些URL对应的网页内容是不安全的,3.3会遇到请求超时的问题,我们用异常捕获来排除所有的问题,代码如下:
def getContent():
#获得url所对应的内容,并进行异常的捕获
i = 0
url = open("TestUrl.txt")
next(url)
for urlcontent in url:
try :
#在获取远程网页内容时会遇到的卡死现象,也就是说如果请求的页面很久没有做出相应,那么
#Python就会一直处于等待过程,会一直停在page.read()这条语句上,所以要设置超时处理
page = urllib2.urlopen(urlcontent,timeout=5)
i += 1
contents = page.read()
f = file("TestContent"+str(i)+".txt" , "w+")
f.write(contents)
print(i)
except Exception,ex:
print("404 or time out")
以上代码我们会把url所对应的内容写入到各自文件中。
以上就是我现在做的一些工作,对于数据的搜集。