返回首页
当前位置: 主页 > 编程语言 > Python教程 >

如何通过Python爬取豆瓣TOP250的电影信息

时间:2019-11-21 16:30来源:电脑教程学习网 www.etwiki.cn 编辑:小山哥
本文将通过python爬虫来获取豆瓣:url = “http://movie.douban.com/top250/”: 的电影名称,、电影评分、 评价人数、 电影短评的全部信息,具体的执行代码如下:
1.import re
2.import requests
3.from bs4 import BeautifulSoup
4.
5.def get_content(url,):
6.    try:
7.        user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.109 8.Safari/537.36"
9.        response = requests.get(url,  headers={'User-Agent': user_agent})
10.        response.raise_for_status()   # 如果返回的状态码不是200, 则抛出异常;
11.        response.encoding = response.apparent_encoding  # 判断网页的编码格式, 便于respons.text知道如何解码;
12.    except Exception as e:
13.        print("爬取错误")
14.    else:
15.        print(response.url)
16.        print("爬取成功!")
17.        return  response.content
18.
19.def parser_content(htmlContent):
20.    # 实例化soup对象, 便于处理;
21.    soup = BeautifulSoup(htmlContent, 'html.parser')
22.    #  1). 电影信息存储在ol标签里面的li标签:
23.    #  <ol class="grid_view">
24.    olObj = soup.find_all('ol', class_='grid_view')[0]
25.
26.    #  2). 获取每个电影的详细信息, 存储在li标签;
27.    details = olObj.find_all('li')
28.
29.    for detail in details:
30.        # 3). 获取电影名称;
31.        movieName = detail.find('span', class_='title').get_text()
32.
33.        # 4). 电影评分:
34.        movieScore = detail.find('span', class_='rating_num').get_text()
35.
36.        # 5). 评价人数***************
37.        # 必须要转换类型为字符串
38.        movieCommentNum = str(detail.find(text=re.compile('\d+人评价')))
39. 
40.      # 6). 电影短评
41.        movieCommentObj = detail.find('span', class_='inq')
42.        if movieCommentObj:
43.            movieComment = movieCommentObj.get_text()
44.        else:
45.            movieComment = "无短评"
46.        movieInfo.append((movieName, movieScore, movieCommentNum, movieComment))
47.
48.import openpyxl
49.def create_to_excel(wbname, data, sheetname='Sheet1', ):
50.    """
51.    将制定的信息保存到新建的excel表格中;
52.    :param wbname:
53.    :param data: 往excel中存储的数据;
54.    :param sheetname:
55.    :return:
56.    """
57.    print("正在创建excel表格%s......" % (wbname))
58.    # wb = openpyxl.load_workbook(wbname)
59.    #  如果文件不存在, 自己实例化一个WorkBook的对象;
60.    wb = openpyxl.Workbook()
61.    # 获取当前活动工作表的对象
62.    sheet = wb.active
63.    # 修改工作表的名称
64.    sheet.title = sheetname
65.    # 将数据data写入excel表格中;
66.    print("正在写入数据........")
67.    for row, item in enumerate(data):  # data发现有4行数据, item里面有三列数据;
68.        print(item)
69.        for column, cellValue in enumerate(item):
70.            # cell = sheet.cell(row=row + 1, column=column + 1, value=cellValue)
71.            cell = sheet.cell(row=row+1, column=column + 1)
72.            cell.value = cellValue
73.    wb.save(wbname)
74.    print("保存工作薄%s成功......." % (wbname))
75.
76.if __name__ == '__main__':
77.    doubanTopPage = 2
78.    perPage = 25
79.    # [(), (), ()]
80.    movieInfo = []
81.    # 1, 2, 3 ,4, 5
82.    for page in range(1, doubanTopPage+1):
83        # start的值= (当前页-1)*每页显示的数量(25)
84.        url = "https://movie.douban.com/top250?start=%s" %((page-1)*perPage)
85.        content = get_content(url)
86.        parser_content(content)
87.    create_to_excel('/tmp/hello.xlsx', movieInfo, sheetname="豆瓣电影信息")
------分隔线----------------------------
标签(Tag):
------分隔线----------------------------
推荐内容
猜你感兴趣