定制小程序开发费用用python爬取豆瓣影评及影片信息(评论时间、用户ID、评论内容)

入门:python定制小程序开发费用爬取豆瓣影评及影片信息:影片评分、评论时间、用户ID、评论内容

定制小程序开发费用豆瓣网作为比较官方的定制小程序开发费用电影评价网站,定制小程序开发费用有很多对新上映影片的评价,不多说,直接进入正题。

思路分析

爬取的目标网站为豆瓣网,链接: 。可以看到最新上映的电影的相关信息,但是含有电影评论的网址是一个二级链接,需要点击电影进入详细信息才可以查看,所以第一步需要获得影片的链接。观察后可以看到链接如下:

使用BeautifulSoup和正则表达式re库可以解析这个网站所在的class以及确定具体链接所在的位置,具体方式如下:

bs = BeautifulSoup(html.text,'html.parser')movie_list = bs.find_all(class_='item')#定位链接元素links = re.compile('class="nbg" href="(.*?)" title=')links = re.findall(links,str(movie_list))
  • 1
  • 2
  • 3
  • 4
  • 5

可以在控制台看到是否查询成功,得到的结果如下:

['https://movie.douban.com/subject/35118954/', 'https://movie.douban.com/subject/35414623/', 'https://movie.douban.com/subject/35230876/', 'https://movie.douban.com/subject/34477861/', 'https://movie.douban.com/subject/35507172/', 'https://movie.douban.com/subject/35700395/', 'https://movie.douban.com/subject/30362175/', 'https://movie.douban.com/subject/35240235/', 'https://movie.douban.com/subject/35073886/', 'https://movie.douban.com/subject/35056243/']在这里插入代码片
  • 1

拿到这些链接之后,在分别请求这些链接,分析页面,就可以拿到最后所需要的数据。

for item in links:	#TODO 解析页面 定位元素	...	pass
  • 1
  • 2
  • 3
  • 4

元素定位

分析页面 得到各个所需的信息所在位置 综合使用re和BeautifulSoup定位即可 以用户ID为例:(因为这里有短评和长评两种,所以分开查询)

 #用户名称    user = comment.find_all(class_ = 'comment-info')    user = re.findall('href.*?/">(.*?)</a>',str(user))    subscriber = re.findall('class="name".*?href.*?/">(.*?)</a>',str(long_comment))    #print(subscriber) 打印用户名称信息    #['CydenyLau', '斯宾诺莎画板', 'Zion', '莫选好片', '小小X', '今夜', 'Maggie_in_LA', 'Gary', '辉兔的爱与生活', '职业影迷']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里有一个小tips:查找元素的时候要由大到小查询,先查询大的包含的元素,在慢慢锁定自己需要的内容、有用的信息。理论上来说是可以直接用re精确定位到自己所需要的元素 但是这样定位的精度低、错误率高,不建议使用。

完整代码

完整代码如下,复制就可以直接使用,最后使用Dataframe存储数据,也可以保存到本地:

import requestsimport refrom bs4 import BeautifulSoupimport pandas as pdurl = 'https://movie.douban.com/chart'#headers是将爬虫脚本伪装为浏览器请求 如果没有浏览器headers 请求结果是空的 所以一定要加headersheaders = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'}html = requests.get( url , headers = headers)bs = BeautifulSoup(html.text,'html.parser')movie_list = bs.find_all(class_='item')#定位链接元素links = re.compile('class="nbg" href="(.*?)" title=')links = re.findall(links,str(movie_list))#为代码整洁 减少冗余代码 def collection_data(pakeage = None ,data = None):    for item in data:        item.replace(" " ,'')        pakeage.append(item)    return pakeage#声明容器movies_title,release_date,movies_rate,comment_user,movie_comment,comment_postline= [],[],[],[],[],[]#通过链接找到新的页面for item in links[:1]:    page = requests.get(item,headers=headers)    page = BeautifulSoup(page.text,'html.parser')    #标题    title = page.find_all(id = 'content' )    set_title = re.compile('property="v:itemreviewed">(.*?)</span>')    title = re.findall(set_title,str(title))    #年份    year = page.find_all(class_ = 'year')    year = re.findall(">(.*?)</span>",str(year))        #评分    rate = page.find_all(class_ = 'll rating_num')    rate = re.findall('"v:average">(.*?)</strong>',str(rate))    #短评信息    comment = page.find_all(class_="comment")    comment = BeautifulSoup(str(comment),'html.parser')    #发表时间    postline = comment.find_all(class_= 'comment-time')    postline = re.findall('title="(.*?)"',str(postline))    #评论内容    short_commentary = comment.find_all(class_ = 'comment-content')    short_commentary = re.findall('"short">(.*?)</span>',str(short_commentary))    #用户名称    user = comment.find_all(class_ = 'comment-info')    user = re.findall('href.*?/">(.*?)</a>',str(user))        #正常影评    long_comment = page.find_all(class_ = 'main review-item' )    #用户    subscriber = re.findall('class="name".*?href.*?/">(.*?)</a>',str(long_comment))    #评论发表时间    long_comment = BeautifulSoup(str(long_comment),'html.parser')    set_time = re.compile('main-meta".*?">(.*?)</span>')    posttime = re.findall(set_time,str(long_comment))    #    commentary = long_comment.find_all(class_ = 'short-content' )    set_comment = re.compile('"short-content">(.*?)\(<a.*?</a>',re.S)    commentary = re.findall(set_comment,str(commentary))        comment_user = collection_data(comment_user,user)    comment_user = collection_data(comment_user,subscriber)    movie_comment = collection_data(movie_comment,short_commentary)    movie_comment = collection_data(movie_comment,commentary)    comment_postline = collection_data(comment_postline,postline)    comment_postline = collection_data(comment_postline,posttime)    for i in range(len(comment_postline)):        movies_title = collection_data(movies_title,title)        release_date = collection_data(release_date,year)        movies_rate = collection_data(movies_rate,rate)dataframe = pd.DataFrame({    "title":movies_title,    "release_date":release_date,    "rate":movies_rate,    "user":comment_user,    "comment":movie_comment,    "postline":comment_postline})#保存信息到本地#dataframe.tocsv("本地路径",encoding = 'gbk')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94

如果对本文有任何疑问 欢迎讨论交流!点个赞再走哦!

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发