博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
80行代码爬取豆瓣Top250电影信息并导出到csv及数据库
阅读量:6458 次
发布时间:2019-06-23

本文共 1462 字,大约阅读时间需要 4 分钟。


1 下载页面并处理

DOWNLOAD_URL = 'http://movie.douban.com/top250/'html = requests.get(url).texttree = lxml.html.fromstring(html)

2 提取数据

观察该网站html结构

观察该网站html结构

可知该页面下所有电影包含在 ol 标签下。每个 li 标签包含单个电影的内容。

使用XPath语句获取该ol标签

movies = tree.xpath("//ol[@class='grid_view']/li")

在ol标签中遍历每个li标签获取单个电影的信息。

图片描述

以电影名字为例

for movie in movies:    name_num = len(movie.xpath("descendant::span[@class='title']"))    name = ''    for num in range(0, name_num):        name += movie.xpath("descendant::span[@class='title']")[num].text.strip()    name = ' '.join(name.replace('/', '').split())  # 清洗数据

其余部分详见源码


3 页面跳转

图片描述

检查“后页”标签。跳转到下一页面

next_page = DOWNLOAD_URL + tree.xpath("//span[@class='next']/a/@href")[0]

返回None则已获取所有页面。


4 导入csv

创建csv文件

writer = csv.writer(open('movies.csv', 'w', newline='', encoding='utf-8'))fields = ('rank',  'name', 'score', 'country', 'year', 'category', 'votes', 'douban_url')writer.writerow(fields)

其余部分详见源码


5 导入数据库(以mysql为例)

  1. 先在mysql中创建数据库与表,表的属性应与要插入的数据保持一致
  2. 连接数据库db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd=PWD, db='douban',charset='utf8')
    创建游标cur = db.cursor()
  3. 将获取的电影信息导入数据库
sql = "INSERT INTO test(rank, NAME, score, country, year, " \          "category, votes, douban_url) values(%s,%s,%s,%s,%s,%s,%s,%s)"    try:        cur.executemany(sql, movies_info)        db.commit()    except Exception as e:        print("Error:", e)        db.rollback()

6 效果显示

图片描述

图片描述

因Windows系统默认以ANSI编码打开Excel,所以直接用Excel打开csv文件会出现乱码,需对其重新编码。

以上所有内容可以在80行Python代码内完成,很简单吧。(`・ω・´)

转载地址:http://evizo.baihongyu.com/

你可能感兴趣的文章
SoapUI中如何传递cookie
查看>>
shell中的一些技巧和知识
查看>>
eclipse 导出Runnable JAR file ,双击无法执行原因与解决 双击后闪退的原因 批处理java打包文件 @echo off start javaw -jar *.jar...
查看>>
静态成员变量的初始化
查看>>
POJ 1269 Intersecting Lines(判断两直线位置关系)
查看>>
MSSQL数据库跨表和跨数据库查询方法简(转)
查看>>
spring3.0.7中各个jar包的作用总结
查看>>
Windows 10 /win10 上使用GIT慢的问题,或者命令行反应慢的问题
查看>>
SSM——查询_分页
查看>>
梯度下降(Gradient descent)
查看>>
Windows平台分布式架构实践 - 负载均衡
查看>>
如何让LinearLayout也有类似Button的点击效果?
查看>>
JAVA读取文件方法大全
查看>>
寻找最小的k个数
查看>>
CSS3中的动画效果记录
查看>>
CI框架整合微信公共平台接口
查看>>
XCode快捷键
查看>>
request.getScheme()的使用方法
查看>>
Kaldi单音素模型 训练部分
查看>>
Android快速开发常用知识点系列目录
查看>>