snail:) 发表于 2018-2-23 23:59:17

豆瓣250爬取数据并制成excel(待续)

本帖最后由 snail:) 于 2018-2-24 00:02 编辑

import requests
import re
import bs4
import openpyxl
#获得网页源码(未转码)
def open_url(url):
    headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
    html = requests.get(url,headers = headers)
    return html

deffind_movies(html):
    soup = bs4.BeautifulSoup(html.text,'html.parser')#html.text是requests模块里面的自动解码功能,解码为文本的形式(自动匹配源码的编码形式)
    movies = soup.find_all('div',class_ = 'hd')
    movie = []#用于保存电影民称
    for each in movies:
      movie.append(each.a.span.text)
    pop = []#用于保存评价人数
    rate = []#用于保存评分信息
    rates = soup.find_all('div',class_='star')
    for each in rates:
      rate.append(each.text.split('\n'))
      pop.append(re.search(r'\d+',each.text.split('\n')).group())
      #group 用来读取数据re.search(),#暂时理解为类对象,group()方法访问类对象里面的变量
      
    jianjie = []#保存电影简介
    jianjies = soup.find_all('div',class_='bd')
    for each in jianjies:
      '''
      这里我看了原网址的代码,因为jianjies里面还有有些其他不是简介的内容也被包括进去了,所以下面需要一个容错的表达
      '''
      try:
            jianjie.append(each.p.text.split('\n').strip()+each.p.text.split('\n').strip())#strip()函数去前后空格
      except:
            continue
    result = []
    i = len(movie)
    for n in range(i):
      result.append(,rate,pop,jianjie])#往excel里添加数据需要是列表的形式
    return result
def save_to_excel(result):
    '''
    将数据保存到excel中
    '''
    wb = openpyxl.Workbook()
    ws = wb.active

    ws['A1'] = "电影名称"
    ws['B1'] = '评分'
    ws['C1'] = "评价人数"
    ws['D1'] = "资料"

    for each in result:
      ws.append(each)

    wb.save("豆瓣TOP250电影.xlsx")
url = 'https://movie.douban.com/top250'
html = open_url(url)
result = find_movies(html)
save_to_excel(result)




这里还未把其他几页放进去,因为找页数的方法不是很明白需要继续学习。。。

冷月无痕 发表于 2019-7-21 20:06:43

{:5_108:}

令狐陈 发表于 2022-9-7 15:45:47

好好

18975173112 发表于 2023-5-17 09:33:10

学习中
页: [1]
查看完整版本: 豆瓣250爬取数据并制成excel(待续)