# -*- coding: utf-8 -*-
"""
Created on Sun Dec 12 18:56:30 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'<span class="title">[^/]+<'#正则表达式,规定了我需要爬取的链接的格式,正则表达式,加括号没影响,多个括号代表多个条件
#我一直以为[^"]的意思是任何字符,结果不是的, 意思是不包含"的任何字符,只要改成不包含反斜杠,就会搜索到电影名为止了
moviename=re.findall(p,html)
q=r'property="v:average">[0-9]\.[0-9]<'
moviescore=re.findall(q,html)
for j in range(0,25):
text1=str(moviename[j])
text11=text1.lstrip('<span class="title">')
text12=text11.rstrip('<')
text2=str(moviescore[j])
text21=text2.lstrip('property="v:average">')
text22=text21.rstrip('<')
with open('C://Users/刘子豪/Desktop/doubanmovie.txt','a',encoding='utf-8') as f:#在python当中需要用到的路径符号是反斜杠,a是继续写,w是覆盖
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://movie.douban.com/top250?'+page_list[-2]#他这个本来都是取第一个,不对不对,豆瓣应该有额外的规则
return page_url
if __name__ == '__main__':
url = 'https://movie.douban.com/top250?start=0'
i=0
while i != 10:
html=openurl(url)
get_book(html)
url=get_page(html)
i=i+1
|