爬取豆瓣电影Top250

6 篇文章 0 订阅
4 篇文章 0 订阅

1.1 爬虫基本原理

  爬虫是模拟用户(User),向服务器(Server)发送请求(Request),获取响应(Response)的程序(Program)。

1.2 请求(Request)

  1.2.1请求方式

    请求常用的方式有get与post方式
    post常用于表单提交

  1.2.2请求头

    请求头包括提交请求的重要信息,常见字段有User-Agent,Refer, Proxy等

1.3 响应(Response)

获取响应的内容,解析以获取相应的信息。

  响应码
  • 200:响应成功
  • 404:用户访问错误
  • 500:服务器错误

1.4 代码演示(Demonstration)

import requests

url = 'https://blog.csdn.net/the_harder_to_love'  # 我的博客主页
response = requests.get(url)  # get method
# response = requests.get(url, data='夜是故乡明')  # 加上参数data, post method
html = response.text  # 获取网页内容
print(html)

1.5 正则表达式(Regular Expression)

  正则表达式是字符串匹配的语言,是解析信息的一种方式。
推荐资料
  廖雪峰-正则表达式
  菜鸟教程-正则表达式
  以及练习正则表达式的学习工具:正则表达式在线测试

1.6 爬取豆瓣电影Top250案例

  本人觉得用re解析html过于麻烦,所以使用PyQuery中CSS选择器完成信息解析,获取了 电影排名,电影名称,导演,主演,上映年份,国家,类型,评分,摘要信息,代码如下。

'''
爬取豆瓣电影Top 250
'''

import requests
from pyquery import PyQuery as pq
import time

BASE_URL = 'https://movie.douban.com/top250?start='


def get_movies():
    movies = []
    for i in range(0, 250, 25):
        url = BASE_URL + str(i)
        html = requests.get(url).text
        doc = pq(html)
        lis = doc('ol.grid_view li').items()
        for li in lis:
            # 电影排名
            rank = li('div.pic em').text()

            # 电影名称
            info = li('div.info')
            name = ''.join([item.text() for item in info('div.hd a span').items()])
            name = ''.join(name.split())  # 去除所有空格

            cnts = list(li('p').items())[0].text().split('\n')

            # 导演,演员
            humans = [item for item in cnts[0].split('\xa0') if item]

            if len(humans) < 2:
                director = humans[0]
                starring = ''
                director = director.replace('导演: ', '')
            else:
                director, starring = humans
                director = director.replace('导演: ', '')
                starring = starring.replace('主演: ', '')

            # 上映年份,国家,类型
            # 移除&nbsp空格符
            year, country, types = (cnts[1].replace('\xa0', '').split('/'))[-1:-4:-1]

            # 评星
            star = li('div.star span.rating_num').text()

            # 摘要
            quote = li('p.quote').text()

            # 电影排名,电影名称,导演,主演,上映年份,国家,类型,评分,摘要
            movie = (rank, name, director, starring, year, country, types, star, quote)
            print(movie)
            movies.append(movie)
        with open('douban_movies_top250.txt', 'w', encoding='utf-8') as f:
            f.writelines(','.join(movie)+'\n' for movie in movies)
    return movies




def count_spend_time(func):
    start_time = time.time()
    func()
    end_time = time.time()
    time_dif = (end_time - start_time)
    second = time_dif%60
    minute = (time_dif//60)%60
    hour = (time_dif//60)//60
    print('spend ' + str(hour) + 'hours,' + str(minute) + 'minutes,' + str(second) + 'seconds')


if __name__ == '__main__':
    count_spend_time(get_movies)

豆瓣电影Top 250 爬虫源代码

豆瓣电影Top 250 电影信息

1.7 爬取豆瓣电影Top250案例小结

  豆瓣电影相关信息可以访问详情页,获取更加完整,全面的信息。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值