|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)
复制代码
这里还未把其他几页放进去,因为找页数的方法不是很明白需要继续学习。。。 |
|