# -*- coding: utf-8 -*- """ Created on Sun Dec 12 17:22:00 2021 @author: davis """ #试一下输入豆瓣网址然后就能自动分析网页上的书名/电影名和评分进行统计 import urllib.request import re def openurl(url): proxy_support=urllib.request.ProxyHandler({'http':'182.84.144.73'})#找一个代理ip opener = urllib.request.build_opener(proxy_support)#定义一个opener opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0')]#opener的一个headers urllib.request.install_opener(opener) head={} head['Connection']='close' req=urllib.request.Request(url) #先request得到对象 response=urllib.request.urlopen(req) #然后得到response对象 html=response.read().decode('utf-8')#然后进行解码得到我们要的格式 return html def get_book(html): p=r'(title="[^"]+")'#正则表达式,规定了我需要爬取的链接的格式,正则表达式,加括号没影响,多个括号代表多个条件 bookname=re.findall(p,html) #想在正则表达式中排除“可试读”的,太麻烦,直接爬下来之后删掉“可试读”的 while 'title="可试读"' in bookname: bookname.remove('title="可试读"') q=r'rating_nums">[0-9].[0-9]<' bookscore=re.findall(q,html) for i in range(0,25): text1=str(bookname[i]) text11=text1.lstrip('title="') text12=text11.rstrip('"') text2=str(bookscore[i]) text21=text2.lstrip('rating_nums">') text22=text21.rstrip('<') with open('C://Users/刘子豪/Desktop/doubanbook.txt','a',encoding='utf-8') as f:#在python当中需要用到的路径符号是反斜杠 text = 'n'+text12+' '+text22 f.write(text) def get_page(html): page=r'start=[0-9]{2,3}' #Newer Comments" href="https://book.douban.com/top250?start=25 page_list=re.findall(page,html) page_url='https://book.douban.com/top250?'+page_list[-1]#他这个本来都是取第一个,不对不对,豆瓣应该有额外的规则 return page_url if __name__ == '__main__': url = 'https://book.douban.com/top250?start=0' i=0 while i != 10: html=openurl(url) get_book(html) url=get_page(html) i=i+1
主要还是练手,不过豆瓣中途把我给封了,还好换了浏览器agent就好了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)