这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战。
爬取数据的网站:网址:movie.douban.com/top250?star…
1 准备工作
1.1分析页面
(1)页面包括250条电影数据,分10页,每页25条
(2)每页的url的不同之处:最后的数值=(页数-1)*25
(3)借助Chroome开发者工具来分析网页,鼠标右键点击检查,在Elements下找到需要的数据的位置
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...语句。
3 解析内容
3.1 标签解析
使用BeautifulSoup模块对页面内容进行标签解析
3.2 正则提取
使用正则表达式,从上一步获取到的标签中提取需要的标签属性以及相关内容,需要提取的内容有:
(1)影片详细链接
(2)影片封面链接
(3)影片名称链接
(4)影片评分
(5)影片评价人数
(6)影片概况
(7)影片的相关内容
匹配以上内容的正则表达式如下
4 保存数据
4.1 数据库存储
(1)创建数据库
(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)数据存储结果