1 下载页面并处理
DOWNLOAD_URL = 'http://movie.douban.com/top250/'
html = requests.get(url).text
tree = lxml.html.fromstring(html)
2 提取数据
观察该网站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为例)
- 先在mysql中创建数据库与表,表的属性应与要插入的数据保持一致
- 连接数据库
db = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd=PWD, db='douban',charset='utf8')
创建游标cur = db.cursor()
- 将获取的电影信息导入数据库
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://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。