下午事情少,顺便把昨天的爬虫练习下,平时都看磊的技术博哥(干货比较多);就试试先写一个简单的爬虫,后期有机会再完善,做整站和多线程。
1、观察爬取的URL:
通过观察我们发现,在首页部分包含有文章的标题列表,然后思路就是;通过这一页的url可以获取所有文章标题,再通过标题获取到文章的URL,在通过RUL下载:
观察这一页的URL为:
http://dl528888.blog.51cto.com/2382721/p-1:第二页往后类推就是p-2..p-*,这样就很容易把整站都爬下来(这里只是取第一个,可以用for 和range的方式都下载完 )。
2、然后结合BeautifulSoup,分析结构,根据标题的内容往下爬取到连接,然后下载:
代码:
#coding:utf-8
#author : xiaoluo
#2015.10.10
#http://dl528888.blog.51cto.com/2382721/p-1
import urllib,urllib2
from bs4 import BeautifulSoup
class Spider:
def __init__(self,url):
self.url = url
self.headers = {‘User-Agent‘:‘Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6‘ }
def binglogdict(self,url):
result_dict = {}
req = urllib2.Request(self.url,headers=self.headers)
html = urllib2.urlopen(req)
soup = BeautifulSoup(html)
for i in soup.find_all("h3",attrs={"class":"artTitle"}):
url = i.a.get("href")
tal = i.get_text()
result_dict[url]=tal
return result_dict
def downblog(self):
result_dict = self.binglogdict(self.url+‘/2382721/p-1‘)
for k,v in result_dict.items():
url = self.url + k
fname = v.strip(‘\n‘) + ‘.html‘
f = open(fname,‘w+‘)
req = urllib2.Request(url,headers=self.headers)
html = urllib2.urlopen(req).read()
f.write(html)
f.close()
if __name__ == ‘__main__‘:
xiaoluo = Spider(‘http://dl528888.blog.51cto.com‘)
xiaoluo.downblog()运行结果、看到文章以标题的形式下载成了html文件:
本文出自 “小罗” 博客,请务必保留此出处http://xiaoluoge.blog.51cto.com/9141967/1701625
原文地址:http://xiaoluoge.blog.51cto.com/9141967/1701625