【Python】从0开始写爬虫——豆瓣电影

1. 最近略忙。。java在搞soap,之前是用工具自动生成代码的。最近可能会写一个soap的java调用

2. 这个豆瓣电影的爬虫。扒信息的部分暂时先做到这了。扒到的信息如下

from scrapy import app
import re

header = {
    ‘User-Agent‘:
        ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36‘,
    ‘Host‘: ‘movie.douban.com‘,
    ‘Accept-Language‘: ‘zh-CN,zh;q=0.9‘
}

movie_url = "https://movie.douban.com/subject/27132728/?tag=%E7%83%AD%E9%97%A8&from=gaia"

m_id = re.search("[0-9]+", movie_url).group()

# 获取soup对象
soup = app.get_soup(url=movie_url, headers=header, charset="utf-8")
content = soup.find(id="content")

# 抓取电影名字和上映年份
m_name = content.find("h1").find("span").string
m_year = content.find(class_="year").string
m_year = m_year[1:-1]  # 去掉头尾的括号

# 抓取导演
info = content.find(id="info")
m_directer = info.find(attrs={"rel": "v:directedBy"}).string# 上映日期
m_date = info.find(attrs={"property": "v:initialReleaseDate"}).string
m_date = re.search("[-,0-9]+", m_date).group()

# 类型
types = info.find_all(attrs={"property": "v:genre"}, limit=2)
m_types = []
for type_ in types:
    m_types.append(type_.string)

# 抓取主演,只取前面五个
actors = info.find(class_="actor").find_all(attrs={"rel": "v:starring"}, limit=5)
m_actors = []
for actor in actors:
    m_actors.append(actor.string)

# 片长
m_time = info.find(attrs={"property": "v:runtime"}).string
m_time = re.search("[0-9]+", m_time).group()

# 评分
score_info = soup.find(id="interest_sectl")
m_score = score_info.find("strong").string

m_stars = score_info.find_all(class_="rating_per")
m_rate = []
for star in m_stars:
    m_rate.append(star.string[:-1])

m_votes = score_info.find(attrs={"property": "v:votes"}).string

print("id", m_id, "名称", m_name, "年份 ", m_year, "导演 ", m_directer, "主演", m_actors)

print("上映日期", m_date, "类型", m_types, "片长", m_time)

print("评分", m_score, "星评(从5星到1星)", m_rate, "评价总数", m_votes)

输出如下

id 27132728 名称 致命警告 El aviso 年份  2018 导演  丹尼尔·卡尔帕索罗 主演 [‘奥拉·加里多‘, ‘劳尔·阿雷瓦洛‘, ‘贝伦·奎斯塔‘, ‘Sergio Mur‘, ‘Aitor Luna‘]
上映日期 2018-03-23 类型 [‘惊悚‘] 片长 92
评分 6.4 星评(从5星到1星) [‘14.2‘, ‘19.9‘, ‘41.1‘, ‘21.3‘, ‘3.5‘] 评价总数 445

把这些狗东西封装成一个方法。并且随便找几个豆瓣电影的url试一下。在多尝试几个url之后,会报一些问题,主要是没有进行空判断, 所以稍微修改了一点

from scrapy import app
import re

def douban_movie(movie_url):

    header = {
        ‘User-Agent‘:
            ‘Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36‘,
        ‘Host‘: ‘movie.douban.com‘,
        ‘Accept-Language‘: ‘zh-CN,zh;q=0.9‘
    }
    m_id = re.search("[0-9]+", movie_url).group()

    # 获取soup对象
    soup = app.get_soup(url=movie_url, headers=header, charset="utf-8")
    content = soup.find(id="content")

    # 抓取电影名字和上映年份
    m_name = content.find("h1").find("span").string
    m_year = content.find(class_="year").string
    m_year = m_year[1:-1]  # 去掉头尾的括号

    # 抓取导演
    info = content.find(id="info")
    m_directer = info.find(attrs={"rel": "v:directedBy"}).string

    # 上映日期
    m_date = info.find(attrs={"property": "v:initialReleaseDate"}).string
    m_date = re.search("[-,0-9]+", m_date).group()

    # 类型
    types = info.find_all(attrs={"property": "v:genre"}, limit=2)
    m_types = []
    for type_ in types:
        m_types.append(type_.string)

    # 抓取主演,只取前面五个
    actors = info.find(class_="actor").find_all(attrs={"rel": "v:starring"}, limit=5)
    m_actors = []
    for actor in actors:
        m_actors.append(actor.string)

    # 片长
    m_time = info.find(attrs={"property": "v:runtime"})
    m_time = re.search("[0-9]+", m_time.string).group() if m_time else 0

    # 评分
    score_info = soup.find(id="interest_sectl")
    m_score = score_info.find("strong").string

    m_stars = score_info.find_all(class_="rating_per")
    m_rate = []
    for star in m_stars:
        m_rate.append(star.string[:-1])

    m_votes = score_info.find(attrs={"property": "v:votes"})
    m_votes = m_votes.string if m_votes else 0

    print("id", m_id, "名称", m_name, "年份 ", m_year, "导演 ", m_directer, "主演", m_actors)

    print("上映日期", m_date, "类型", m_types, "片长", m_time)

    print("评分", m_score, "星评(从5星到1星)", m_rate, "评价总数", m_votes)

douban_movie("https://movie.douban.com/subject/30236775/?from=showing")
douban_movie("https://movie.douban.com/subject/26842702/?tag=%E7%83%AD%E9%97%A8&from=gaia")
douban_movie("https://movie.douban.com/subject/26973784/?tag=%E6%9C%80%E6%96%B0&from=gaia")
douban_movie("https://movie.douban.com/subject/30249296/?tag=%E7%83%AD%E9%97%A8&from=gaia")

输出如下

id 30236775 名称 旅行吧!井底之蛙 年份  2018 导演  陈设 主演 [‘王雪沁‘, ‘吴凡‘, ‘周宗禹‘, ‘强光宗‘, ‘张艺文‘]
上映日期 2018-08-18 类型 [‘动画‘, ‘奇幻‘] 片长 78
评分 None 星评(从5星到1星) [] 评价总数 0
id 26842702 名称 燃烧 ?? 年份  2018 导演  李沧东 主演 [‘刘亚仁‘, ‘史蒂文·元‘, ‘全钟瑞‘, ‘金秀京‘, ‘崔承浩‘]
上映日期 2018-05-16 类型 [‘剧情‘, ‘悬疑‘] 片长 148
评分 7.9 星评(从5星到1星) [‘25.9‘, ‘48.1‘, ‘21.4‘, ‘3.2‘, ‘1.3‘] 评价总数 81519
id 26973784 名称 设局 La niebla y la doncella 年份  2017 导演  安德烈斯·M·科佩尔 主演 [‘基姆·古铁雷斯‘, ‘薇洛妮卡·恩切圭‘, ‘奥拉·加里多‘, ‘罗伯托·阿拉莫‘]
上映日期 2017-09-08 类型 [‘惊悚‘] 片长 0
评分 5.2 星评(从5星到1星) [‘1.2‘, ‘9.8‘, ‘42.0‘, ‘40.0‘, ‘7.1‘] 评价总数 320
id 30249296 名称 我们的侣行 第二季 年份  2018 导演  张昕宇 主演 [‘张昕宇‘, ‘梁红‘]
上映日期 2018-06-12 类型 [‘真人秀‘] 片长 0
评分 8.9 星评(从5星到1星) [‘59.3‘, ‘27.8‘, ‘11.1‘, ‘1.9‘, ‘0.0‘] 评价总数 342

原文地址:https://www.cnblogs.com/yeyeck/p/9497324.html

时间: 2024-10-03 18:18:28

【Python】从0开始写爬虫——豆瓣电影的相关文章

【Python】从0开始写爬虫——把扒到的豆瓣数据存储到数据库

1. 我们扒到了什么? id, 名称, 上映年份,上映日期,所属类目, 导演,主演,片长,评分,星评,评价人数 2. 把这些数据做一个分类. a..基本信息 :名称, 导演,上映年份, 所属类目, 片长 b.评价信息:评分,星评,评价人数 c.主演表: 主演(我在纠结要不要单独列一张表) 3 .表设计.现在有点蛋疼的是主键.用自增主键还是电影id做主键.经过我的多方面考虑,我慎重(草率)地决定,用电影id(反正都要建唯一索引,为什么不拿来当主键呢..), 所以我刚才又在id那转了一下数据 m_i

基于python的scrapy框架爬取豆瓣电影及其可视化

1.Scrapy框架介绍 主要介绍,spiders,engine,scheduler,downloader,Item pipeline scrapy常见命令如下: 对应在scrapy文件中有,自己增加爬虫文件,系统生成items,pipelines,setting的配置文件就这些. items写需要爬取的属性名,pipelines写一些数据流操作,写入文件,还是导入数据库中.主要爬虫文件写domain,属性名的xpath,在每页添加属性对应的信息等. movieRank = scrapy.Fie

【Python】从0开始写爬虫——转身扒豆瓣电影

豆瓣就比较符合这个“明人不说暗话”的原则.所以我们扒豆瓣,不多说,直接上代码 from scrapy import app import re header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36', 'Host': 'movie.douban.com', 'Accept-Lan

【Python】从0开始写爬虫——开发环境

python小白,稍微看了点语法而已, 连字典的切片都永不顺的那种.本身是写java的,其实java也写得菜, 每天下了班不是太想写java.所以下班总是乱搞,什么都涉猎一点,也没什么太实际的收获.现在打算慢慢写个python爬虫玩 1. python环境搭建.我在windows上也是搭了python环境的,很久了.但是这个我在windows用pip安装的第三方库用起来总是报错.所以我一般都不用.我时用pycharm的python环境的. 在pycharm上安装需要的包,新建项目后,在左上角 F

Python爬虫-豆瓣电影 Top 250

爬取的网页地址为:https://movie.douban.com/top250 打开网页后,可观察到:TOP250的电影被分成了10个页面来展示,每个页面有25个电影. 那么要爬取所有电影的信息,就需要知道另外9个页面的URL链接. 第一页:https://movie.douban.com/top250 第二页:https://movie.douban.com/top250?start=25&filter= 第三页:https://movie.douban.com/top250?start=5

使用selenium爬虫豆瓣电影信息

目前问题: 1.爬虫爬到十七条数据后,就不进行了,处于等待状态,咱不知道问题所在 2.采用selenium爬虫,由于涉及到页面加载,十分缓慢,个人倾向于ajax技术. #from bs4 import BeautifulSoup import re, csv, urllib.request, urllib.parse, time, json, pickle,random from selenium import webdriver from selenium.webdriver.common.k

团队-爬虫豆瓣top250项目-开发文档

https://gitee.com/npq115/pachong/blob/master/savedata.py 项目:团队-爬虫豆瓣top250 我负责的模块:data 存储处理好的抓取到的电影名称 功能:存在部分问题,代码整合后发现只能获取到排名以及电影名称 还在完善. 我编写的部分: def saveData(datalist,savepath): book=xlwt.Workbook(encoding='utf-8',style_compression=0) sheet=book.add

Python小爬虫——抓取豆瓣电影Top250数据

写LeetCode太累了,偶尔练习一下Python,写个小爬虫玩一玩~ 确定URL格式 先找到豆瓣电影TOP250任意一页URL地址的格式,如第一页为:https://movie.douban.com/top250?start=0&filter=,分析该地址: https:// 代表资源传输协议使用https协议: movie.douban.com/top250 是豆瓣的二级域名,指向豆瓣服务器: /top250 是服务器的某个资源: start=0&filter= 是该URL的两个参数,

python豆瓣电影爬虫

python豆瓣电影爬虫 可以爬取豆瓣电影信息,能够将电影信息存进mysql数据库,还能够下载电影预告片.2.3. 4功能使用到selenium库 一个例程运行截图 下载好的电影预告片 MySQL存储的数据 数据表构造 这是程序流程图,详细写明了本爬虫的运行流程 爬虫程序代码 # Author:YFAN import random import requests import lxml.etree from time import sleep import re import pymysql f