前言:

爬取豆瓣电影TOP250的数据,并将爬取的数据存储于Mysql数据库中

本文为整理代码,梳理思路,验证代码有效性——2020.1.4


环境:
Python3(Anaconda3)
PyCharm
Chrome浏览器

主要模块: 后跟括号内的为在cmd窗口安装的指令
requests(pip install requests)
lxml(pip install lxml)
re
pymysql(pip install pymysql )
time

1.

在Mysql名为mydb的数据库中新建数据表,下为建表语句

CREATE TABLE doubanmovie
(
NAME TEXT,
director TEXT,
actor TEXT,
style TEXT,
country TEXT,
release_time TEXT,
time TEXT,
score TEXT
)
ENGINE INNODB DEFAULT CHARSET = utf8;

2.

分析爬取的网页结构

https://movie.douban.com/top250
https://movie.douban.com/top250?start=25&filter=
https://movie.douban.com/top250?start=50&filter=
...

同豆瓣音乐,豆瓣图书的TOP250一样
我们对其构造列表解析式

 urls = ['https://movie.douban.com/top250?start={}'.format(str(i))for i in range(0, 250, 25)]

3.

分析html结构,获取详情页链接

4.

进入详情页后,打开开发者工具(F12),分析html结构获取详细信息

代码如下:

演员取前五个为主演,不足五个的则全取

#标题
name = selector.xpath('//*[@id="content"]/h1/span[1]/text()')[0]# 导演
director = selector.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')[0]# 演员
actors_s = selector.xpath('//span[@class="attrs"]/a/text()')
actors = ""
if len(actors_s) > 5:for s in actors_s[1:5]:actors += (s + '/')actors += actors_s[5]
else:for s in actors_s[-1]:actors += (s + '/')actors += actors_s[-1]# 类型
styles = selector.xpath('//*[@id="info"]/span[@property="v:genre"]/text()')
style = ""
if len(styles) > 1:for s in styles[:-1]:style += (s + '/')style += styles[-1]
else:style = styles[0]# 国家
country = re.findall('制片国家/地区:</span>(.*?)<br', html.text, re.S)[0].strip()# 上映时间
release_time = re.findall('上映日期:</span>.*?>(.*?)\(', html.text, re.S)[0]# 片长
time = re.findall('片长:</span>.*?>(.*?)</sp', html.text, re.S)[0]# 评分
score = selector.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/strong/text()')[0]

5.

将数据保存在Mysql数据库中,有以下“大象装冰箱”三步

  1. “打开冰箱” 连接数据库及光标
conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='mydb', port=3306, charset='utf8')
cursor = conn.cursor()
  1. “将大象装进冰箱” 获取信息插入数据库
cursor.execute("insert into doubanmovie (name, director, actor, style, country,release_time, time,score) ""values(%s, %s, %s, %s, %s, %s, %s, %s)",(str(name), str(director), str(actors), str(style), str(country),str(release_time), str(time), str(score)))
  1. “关上冰箱” 提交事务
conn.commit()

完整代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-# 导入相应的库文件
import requests
from lxml import etree
import re
import pymysql
import time# 连接数据库及光标
conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='mydb', port=3306, charset='utf8')
cursor = conn.cursor()# 加入请求头
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64)AppleWebKit/ 537.36 ''(KHTML, like Gecko) Chrome/56.0.2924.87 Safari/ 537.36'
}# 定义获取详细页URL的函数
def get_movie_url(url):html = requests.get(url, headers=headers)print(url, html.status_code)selector = etree.HTML(html.text)movie_hrefs = selector.xpath('//div[@class="hd"]/a/@href')for movie_href in movie_hrefs:# 调用获取详细页信息的函数get_movie_info(movie_href)# 定义获取详细页信息的函数
def get_movie_info(url):html = requests.get(url, headers=headers)selector = etree.HTML(html.text)print(url, html.status_code)name = selector.xpath('//*[@id="content"]/h1/span[1]/text()')[0]director = selector.xpath('//*[@id="info"]/span[1]/span[2]/a/text()')[0]actors_s = selector.xpath('//span[@class="attrs"]/a/text()')actors = ""if len(actors_s) > 5:for s in actors_s[1:5]:actors += (s + '/')actors += actors_s[5]else:for s in actors_s[-1]:actors += (s + '/')actors += actors_s[-1]styles = selector.xpath('//*[@id="info"]/span[@property="v:genre"]/text()')style = ""if len(styles) > 1:for s in styles[:-1]:style += (s + '/')style += styles[-1]else:style = styles[0]country = re.findall('制片国家/地区:</span>(.*?)<br', html.text, re.S)[0].strip()release_time = re.findall('上映日期:</span>.*?>(.*?)\(', html.text, re.S)[0]time = re.findall('片长:</span>.*?>(.*?)</sp', html.text, re.S)[0]score = selector.xpath('//*[@id="interest_sectl"]/div[1]/div[2]/strong/text()')[0]# 获取信息插入数据库cursor.execute("insert into doubanmovie (name, director, actor, style, country,release_time, time,score) ""values(%s, %s, %s, %s, %s, %s, %s, %s)",(str(name), str(director), str(actors), str(style), str(country),str(release_time), str(time), str(score)))print((name, director, actors, style, country, release_time, time, score))# 程序主入口
if __name__ == '__main__':urls = ['https://movie.douban.com/top250?start={}'.format(str(i))for i in range(0, 250, 25)]for url in urls:# 构造urls并循环调用函数get_movie_url(url)# 睡眠2秒time.sleep(2)# 提交事务conn.commit()# conn.commit()print("爬取结束!!!")

数据截图

爬虫练习-爬取豆瓣电影TOP250的数据相关推荐

  1. python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250

    用Python爬虫实现爬取豆瓣电影Top250 #爬取 豆瓣电影Top250 #250个电影 ,分为10个页显示,1页有25个电影 import urllib.request from bs4 imp ...

  2. 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用

    一起学爬虫--通过爬取豆瓣电影top250学习requests库的使用 学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python req ...

  3. python爬取豆瓣电影top250_Python爬虫 - scrapy - 爬取豆瓣电影TOP250

    0.前言 新接触爬虫,经过一段时间的实践,写了几个简单爬虫,爬取豆瓣电影的爬虫例子网上有很多,但都很简单,大部分只介绍了请求页面和解析部分,对于新手而言,我希望能够有一个比较全面的实例.所以找了很多实 ...

  4. 爬虫练习-爬取豆瓣音乐TOP250的数据

    前言: 爬取豆瓣音乐TOP250的数据,并将爬取的数据存储于MongoDB中 本文为整理代码,梳理思路,验证代码有效性--2020.1.1 环境: Python3(Anaconda3) PyCharm ...

  5. 【网络爬虫】爬取豆瓣电影Top250评论

    前言 本爬虫大致流程为: (1)分析网页--分析网站结构 (2)发送请求--通过requests发送请求 (3)响应请求--得到请求响应的页面 (4)解析响应--分析页面,得到想要的数据 (5)存储文 ...

  6. Python爬虫实例-爬取豆瓣电影Top250

    这是本人Python爬虫实例的第二个实例,不过想来好像没有很大的难度所以适合当做新手入门的第一个爬虫.放在这里供大家参考. 本次实例爬取的网站为豆瓣电影Top250,使用到的第三方库有urllib,B ...

  7. 零基础爬虫----python爬取豆瓣电影top250的信息(转)

    今天利用xpath写了一个小爬虫,比较适合一些爬虫新手来学习.话不多说,开始今天的正题,我会利用一个案例来介绍下xpath如何对网页进行解析的,以及如何对信息进行提取的. python环境:pytho ...

  8. Python 采用Scrapy爬虫框架爬取豆瓣电影top250

    scrapy 简介 在此,默认已经安装好Scrapy,如果没有安装可以到scrapy 官网下载安装. 注意: 在安装Scrapy之前首先需要安装一下python第三方库:(安装方法并不在本文讲解范围, ...

  9. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

最新文章

  1. 经典笔试上机考题-表达式求值
  2. java B2B2C 仿淘宝电子商城系统-Spring Cloud Feign的文件上传实现
  3. spring集成kafka
  4. 数据库事务以及事务的隔离级别
  5. cdev linux_Linux设备管理(二)_从cdev_add说起
  6. 解释一下Spring支持的几种bean的作用域
  7. java -cp 引用多个包_Java -cp 命令行引用多个jar包的简单写法(Windows、Linux)
  8. 4021-基于链地址法的散列表的删除(C++,附思路)
  9. 新浪API, 利用get_uid获取是uid的数据溢出问题解决方案
  10. 功能全面的开源小程序商城-CRMEB
  11. Qunee for HTML5图形组件
  12. Informatica使用工作流程及案例1
  13. 中心极限定理 与 正态分布
  14. 用c写的酒店客房登记管理系统
  15. C++面向对象-12-加号运算符重载
  16. Python项目实战:抓取全网王者荣耀皮肤,收藏最好看的
  17. oracle中的rownumber,oracle中row_number和rownum的区别和联系(翻译)
  18. 南头中学2021年高考成绩查询,深圳新安中学和南头中学哪个好
  19. 【Excel】数据透视表—数据透视表布局(显示)
  20. js object转json

热门文章

  1. 图片如何转JPG格式?教大家两种简单转换方法
  2. Python之日期与时间处理模块(date和datetime)
  3. 亚马逊和ebay,你们现在都是用什么收款平台啊?
  4. Python的类对象
  5. 该不该对减半行情抱有预期?| 一周问答热议
  6. ILRuntime(一)
  7. macbook 快捷键 home ...
  8. flink 流式处理中如何集成mybatis框架
  9. matlab做基尼曲线,计算基尼系数和matplotlib绘制洛伦兹曲线
  10. 【朝花夕拾C语言】:C语言,猜猜谁是凶手?