本次的电影排行来源于豆瓣。材料仅用于自身学习和记录自己学习过程
使用python中的requests、BeautifulSoup、xlwt,三者需要提前下载好。。
预处理:
url:反应网页变化
其中start后面的数字变化每次加25,对应一页,故我们可以得出规律。
需要筛选部分
<ol class="grid_view">
<li>
<div class="item">
<div class="pic">
<em class="">1</em>
<a href="https://movie.douban.com/subject/1292052/">
<img width="100" alt="肖申克的救赎" src="https://img3.doubanio.com/view/photo/s_ratio_poster/public/p480747492.webp" class="">
</a>
</div>
<div class="info">
<div class="hd">
<a href="https://movie.douban.com/subject/1292052/" class="">
<span class="title">肖申克的救赎</span>
<span class="title"> / The Shawshank Redemption</span>
<span class="other"> / 月黑高飞(港) / 刺激1995(台)</span>
</a>
<span class="playable">[可播放]</span>
</div>
<div class="bd">
<p class="">
导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /...<br>
1994 / 美国 / 犯罪 剧情
</p>
<div class="star">
<span class="rating5-t"></span>
<span class="rating_num" property="v:average">9.7</span>
<span property="v:best" content="10.0"></span>
<span>3051126人评价</span>
</div>
<p class="quote">
<span class="inq">希望让人自由。</span>
</p>
</div>
</div>
</div>
本次运行时出现了418,防爬问题。我们需要
代码:
总的:
import requests
from bs4 import BeautifulSoup
import xlwt
#获取我们需要的网页
def request_douban(url,headers):
try:
res=requests.get(url,headers=headers)
if res.status_code == 200:
return res.text
except requests.RequestException:
return None
#存储我们需要的信息
def storeed(page,list):
n = (page * 25) + 1
for item in list:
print(n)
item_name = item.find(class_='title').string
item_img = item.find('a').find('img').get('src')
item_index = item.find(class_='').string
item_score = item.find(class_='rating_num').string
item_author = item.find('p').text
# print('爬取电影:' + item_index + ' | ' + item_name +' | ' + item_img +' | ' + item_score +' | ' + item_author +' | ' + item_intr )
# print('爬取电影:' + item_index + ' | ' + item_name + ' | ' + item_score + ' | ')
sheet.write(n, 0, item_name)
print(item_name)
sheet.write(n, 1, item_img)
sheet.write(n, 2, item_index)
sheet.write(n, 3, item_score)
sheet.write(n, 4, item_author)
# sheet.write(n, 5, item_intr)
n = n + 1
def main(page):
url="https://movie.douban.com/top250?start="+str(page*25)+"&filter="
headers={"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"}
html=request_douban(url,headers)
#初次筛选
soup = BeautifulSoup(html, 'lxml')
#save_to_excel(soup)
list = soup.find(class_='grid_view').find_all('li')
storeed(page,list)
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
sheet = book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True)
sheet.write(0, 0, '名称')
sheet.write(0, 1, '图片')
sheet.write(0, 2, '排名')
sheet.write(0, 3, '评分')
sheet.write(0, 4, '作者')
# sheet.write(0, 5, '简介')
if __name__ == '__main__':
for i in range(0, 10):
main(i)
book.save(u'豆瓣最受欢迎的250部电影.xlsx')