Python爬取豆瓣Top250数据

234 阅读2分钟

这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

爬取数据的网站:网址:movie.douban.com/top250?star…

1 准备工作

1.1分析页面

(1)页面包括250条电影数据,分10页,每页25条

image.png

(2)每页的url的不同之处:最后的数值=(页数-1)*25

image.png

(3)借助Chroome开发者工具来分析网页,鼠标右键点击检查,在Elements下找到需要的数据的位置

image.png

1.2 引入模块

(1)sqlite3:用来将爬取的数据存储到sqlite数据库中

(2)BeautifulSoup:用于解析爬取到的html页面中的标签和标签属性

(3)re:正则表达式,用于匹配爬取到的html页面中的的标签和标签属性

(4)urllib:用于模拟浏览器用户,向豆瓣服务器发送请求,获取需要的数据

import sqlite3
from bs4 import BeautifulSoup
import re
import urllib.request,urllib.error

2 获取数据

(1)对于每一个页面,通过调用askUrl函数来获取页面内容。使用urllib.urlopen发送请求获取响应,使用read获取页面内容。

(2)在访问页面时经常会出现错误,为了出现正常运行,加入异常捕获try...except...语句。

image.png

3 解析内容

3.1 标签解析

使用BeautifulSoup模块对页面内容进行标签解析

image.png

3.2 正则提取

使用正则表达式,从上一步获取到的标签中提取需要的标签属性以及相关内容,需要提取的内容有:

(1)影片详细链接

(2)影片封面链接

(3)影片名称链接

(4)影片评分

(5)影片评价人数

(6)影片概况

(7)影片的相关内容

匹配以上内容的正则表达式如下

image.png

4 保存数据

4.1 数据库存储

(1)创建数据库

image.png

(2)创建表格

sql = ''' create table top250 ( id integer primary key autoincrement, info_link text, pic_link text, cname text, ename varchar , score numeric , rated numeric , introduction text, info text ) '''

(3)插入数据

sql = ''' insert into top250( info_link,pic_link,cname,ename,score,rated,introduction,info ) values(%s) '''% ",".join(data)

(4)数据存储结果

image.png