前言
爬取的数据是:豆瓣电影TOP250
使用的python库有:requests、bs4的BeautifulSoup、pandas。
通过requests爬取网页数据,通过BeautifulSoup解析网页数据,通过pandas将数据保存成excel、csv格式。
爬虫代码
import requests #爬取数据
from bs4 import BeautifulSoup #解析数据
import pandas as pd #保存数据
#主函数,连接其他函数
def main():
url = "https://movie.douban.com/top250?start="
html = getUrlData(url)
getHtmlData(html,url)
#获取网页数据
def getUrlData(url):
try:
# 有些网站会拒绝爬虫访问,需要模拟浏览器访问网站,添加请求头
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"
}
r = requests.get(url,headers=headers,timeout=30)
r.raise_for_status
r.encoding=r.apparent_encoding
html = r.text
return html
except:
return \'发生异常\'
#解析网页数据
def getHtmlData(html,url):
alldata=[]
em_data = []
name_data = []
name_other_data=[]
quote_data=[]
star_data=[]
href_data=[]
for i in range(0,10):
baseurl = url + str(i*25)
html = getUrlData(baseurl)
soup = BeautifulSoup(html,\'html.parser\')
body = soup.body
#需要爬取的数据都在class=item的div里
item = body.find_all(\'div\',{\'class\':\'item\'})
for i in range(len(item)):
#电影排名
em = item[i].find(\'em\')
em_data.append(em.string)
#电影名字
name = item[i].find(\'span\',{\'class\':\'title\'})
name_data.append(name.string)
#电影别名
name_o = item[i].find(\'span\',{\'class\':\'other\'})
name_other_data.append(name_o.string)
#简评
quote = item[i].find(\'span\',{\'class\':\'inq\'})
if (quote is None): #有些电影没有简评
quote_data.append(" ")
else:
quote_data.append(quote.string)
#评分
star = item[i].find(\'span\',{\'class\':\'rating_num\'})
star_data.append(star.string)
#链接
href = item[i].find(\'a\')
href_data.append(href.get(\'href\'))
#保存数据
df = pd.DataFrame({\'排名\':em_data,\'电影名\':name_data,\'评分\':star_data,\'简评\':quote_data,\'链接\':href_data})
df = df.set_index(\'排名\') #将排名列设为索引列
df.to_excel("movieTOP250.xls",encoding=\'utf-8\')
if __name__== "__main__":
main()
数据爬取成功后:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiETPwJWZ3ZCMwcTP39zZuBnLuVzRjVXVE5kMRRUT3lFVPlHM51ENZpmT3dGVOhXSE5EeVRUT4lERNlHMT1UNrR0T6lkaNZXVE1EeJRUT5hzUNVzaE9keJpWT2NmMiNnSywEd5ITW110MaZHetlVdO1GT3lERNl3YXJGc5kHT20ESjBjUIF2Lc12bj5SYphXa5VWen5WY35iclN3Ztl2Lc9CX6MHc0RHaiojIsJye.png)