天天看点

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()

           

数据爬取成功后:

Python | 简单的爬虫