Python | 简单的爬虫
前言
爬取的数据是:豆瓣电影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()
数据爬取成功后:


浙公网安备 33010602011771号