爬取豆瓣电影top250的脚本

爬取豆瓣电影top250的脚本,第1张

爬取豆瓣电影top250的脚本
# -*- 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'[^/]+<'#正则表达式,规定了我需要爬取的链接的格式,正则表达式,加括号没影响,多个括号代表多个条件
    #我一直以为[^"]的意思是任何字符,结果不是的, 意思是不包含"的任何字符,只要改成不包含反斜杠,就会搜索到电影名为止了
    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('')
        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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5658420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存