python大作业爬虫_爬虫大作业

from bs4 importBeautifulSoupimportlogging

importsys

reload(sys)

sys.setdefaultencoding("utf-8")classItem(object):

title= None #帖子标题

firstAuthor = None #帖子原作者

firstTime = None #帖子创建时间

reNum = None #帖子回复浏览数量

LastTime = None #帖子最后回复时间

LastAuthor = None #帖子最后回复作者

link = None #帖子链接

#全局方法获取网页内容

defgetResponseContent(url):try:

response= urllib2.urlopen(url.encode('utf8'),timeout=20)except:

logging.error(u'Python返回URL:{}数据失败'.format(url))else:

logging.info(u'Python返回URL:{}数据成功'.format(url))returnresponse.read()classgetHupuInfo(object):def __init__(self,url):

self.url=url

self.pageSum= 3

self.urls =self.getUrls(self.pageSum)

self.items=self.spider(self.urls)

self.pipelines(self.items)defgetUrls(self,pageSum):

urls=[]

urls.append(self.url)for pn in range(1,pageSum):

tempurl= self.url + '-'+ str(pn+1)

urls.append(tempurl)

logging.info(u'获取URLS成功!\n')returnurlsdefspider(self,urls):

items=[]for url inurls:

htmlContent=getResponseContent(url)

soup= BeautifulSoup(htmlContent,'lxml')

tagtable= soup.find('table',attrs={'id':'pl'})

tagstr= tagtable.find_all('tr')

flag= 0

for tag intagstr:if flag ==0:

flag+=1

continue

else:

flag+= 1item=Item()

item.link= '/'+ tag.get('mid') + '.html'

item.title = tag.find('td', attrs={'class': 'p_title'}).find('a',href = item.link).get_text()

item.firstAuthor = tag.find('td', attrs={'class': 'p_author'}).a.get_text()

item.firstTime= tag.find('td', attrs={'class': 'p_author'}).get_text()

item.reNum= tag.find('td', attrs={'class': 'p_re'}).get_text()

item.LastAuthor= tag.find('td', attrs={'class': 'p_retime'}).a.get_text()

item.LastTime= tag.find('td', attrs={'class': 'p_retime'}).get_text()

items.append(item)

logging.info(u'获取帖子成功')returnitemsdefpipelines(self,items):

fileName= u'Hupu_bxj.txt'with open(fileName,'w') as fp:for item initems:#fp.write('{}\t{}\t{}\t{}\t{}\t{}\n{}\n\n'.format(item.title,item.firstAuthor,item.firstTime,item.reNum,item.LastAuthor,item.LastTime,item.link))

fp.write('{}\n'.format(item.title).encode('utf8'))

logging.info(u'写入文本成功')defgetpiclink(self):

piclink=[]for item inself.items:

piclink.append(self.url[0:20] +item.link)

logging.info(u'返回图片帖子链接成功')returnpiclinkclasspicInfo(object):def __init__(self,links):

self.links=links

self.imgurls=[]

self.spider()

self.pipeline()defspider(self):if self.links ==None:

logging.error('无图片链接')else:for link inself.links:

htmlContent=getResponseContent(link)

soup= BeautifulSoup(htmlContent,'lxml')

tagDiv= soup.find('div',attrs={'id':'tpc'})

img= tagDiv.find('div',attrs={'class':'quote-content'}).find_all('img')if img ==None:continue

else:for subimg inimg:

if subimg.get('data-original') ==None:

imgurl= subimg.get('src')else:

imgurl= subimg.get('data-original')

self.imgurls.append(imgurl)

logging.info(u'获取图片链接成功')defpipeline(self):for i inrange(len(self.imgurls)):

if self.imgurls[i][-3:] == 'png':

imgname= str(i) + '.png'

elif self.imgurls[i][-3:] == 'jpg':

imgname= str(i) + '.jpg'

elif self.imgurls[i][-4:] == 'jpeg':

imgname= str(i) + '.jpeg'

elif self.imgurls[i][-3:] == 'gif':

imgname= str(i) + '.jpeg'

else:continueimg=getResponseContent(self.imgurls[i])

with open (imgname,'ab') as fp:

fp.write(img)

logging.info(u'写入图片成功')if __name__ == '__main__':

logging.basicConfig(level=logging.INFO)

url= u'https://bbs.hupu.com/bxj'HUPU=getHupuInfo(url)

picurls=HUPU.getpiclink()

PIC= picInfo(picurls)

python大作业 一、Turtle创意大PK 自拟题目,完成一个利用Python程序的创意绘图,采用turtle库绘图为主,不少于50行代码,可选采用其他库。 (滑稽绘制) 二、程序练习 2.1 问题描述(10分) 人们常常提到"一万小时定律",就是不管你做什么事情,只要坚持一万小时,应该都可以成为该领域的专家。那么,10000小时是多少年多少天呢? 2.2 问题描述(10分)0380031003800341590145037657 编写计算从n到m和的函数‬,函数名为sum(n,m)‬,函数返回值为n到m所有数据的和‬,使用该函数计算输入数据x,y之间所有数据的和。 2.3 问题描述(15分) 编写函数judgeTri(a,b,c),判断以参数a,b,c的值为边长能否构成三角形并判断三角形的形状;若是锐角三角形,返回R;若是直角三角形,返回Z;若是钝角三角形,返回D;若三边长不能构成三角形,返回ERROR。 2.4 问题描述(15分) 用户输入一个字符串,分别统计其中小写字母、大写字母、数字、空格和其他字符的个数,并在一行内输出小写字母、大写字母、数字、空格和其他字符的个数。 2.5 问题描述(20分) 程序的功能: (1) 使用随机库功能,生成一个包含10个不重复且小于200的正整数列表ls1,输出ls1。‬ (2) 使用列表排序方法,对ls1按奇数在前偶数在后,并且奇数之间的相对顺序不变,偶数之间的相对顺序也不变进行排序,再输出ls1。‬ (3) 使用列表排序方法,对ls1按元素字符长度降序进行排序,输出ls1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值