80行代码爬取豆瓣Top250电影信息并导出到csv及数据库

查看源码html


1 下载页面并处理

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

2 提取数据

观察该网站html结构
观察该网站html结构mysql

可知该页面下全部电影包含在 ol 标签下。每一个 li 标签包含单个电影的内容。git

使用XPath语句获取该ol标签github

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

在ol标签中遍历每一个li标签获取单个电影的信息。
图片描述sql

以电影名字为例数据库

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则已获取全部页面。url


4 导入csv

建立csv文件spa

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代码内完成,很简单吧。(`・ω・´)

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息