马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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
def find_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')[2])
pop.append(re.search(r'\d+',each.text.split('\n')[4]).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')[1].strip()+each.p.text.split('\n')[2].strip())#strip()函数去前后空格
except:
continue
result = []
i = len(movie)
for n in range(i):
result.append([movie[n],rate[n],pop[n],jianjie[n]])#往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)
这里还未把其他几页放进去,因为找页数的方法不是很明白需要继续学习。。。 |