栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

爬取豆瓣电影

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爬取豆瓣电影

爬虫学习

爬取网站的url豆瓣排行
工具:vscode
1、首先安装requests 、lxml,在终端输入

pip install requests
pip install lxml


2、查看豆瓣页面源代码,输入电影名检查是否直接可以从源代码中获取 ctrl+f打开检查工具 输入“霸王别姬”

可以确定所有电影名可直接从源码获取

3、编写代码

url='https://movie.douban.com/top250'

hearders={
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.47'
}
resp = requests.get(url,headers=hearders)

#print(resp.text)

#创建etree对象,传入网页内容
#找到最外层xpth,然后嵌套一层循环获取所有电影信息内容
#路径  
  1. tree=etree.HTML(resp.text) #这里li有多个所以返回的是一个列表 the_first=tree.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li') for i in the_first: #./表示从上一级,也就是the_first路径 #末尾加上[0]是原本获取的数据形式是列表形式,加上之后就只会获得数据 .strip()去掉标签前面空格 title=i.xpath('./div/div[1]/a/img/@alt')[0] score=i.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0].strip() comment=i.xpath('./div/div[2]/div[2]/p[2]/span/text()')[0] print(title) print(score) print(comment)

这里的xpath路径可以直接获取,然后根据需要自己编排

xpath获得内容方式,获取标签中内容直接在路径末尾加上
text(),若要获取标签属性,在末尾加上@xx

4、获取到所有数据后添加到数据库之中

#这里修改为自己数据库的用户名、密码
def insert(value):
    db = pymysql.connect(host='localhost',user='root',password='123456',database='python')
 
    cursor = db.cursor()
    sql = "INSERT INTO moviemessage(moviename,score,comment) VALUES (%s, %s, %s)"
    try:
        cursor.execute(sql,value)
        db.commit()
        print('插入数据成功')
    except:
        db.rollback()
        print("插入数据失败")
    db.close()
CREATE TABLE `moviemessage` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
  `moviename` varchar(255) NOT NULL COMMENT '电影名',
  `score` double NOT NULL COMMENT '评分',
  `comment` varchar(255) NOT NULL COMMENT '评论',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci


所有代码:

#检查页面源代码,看所要获取得信息是否直接存在页面代码之中

#需求:获取电影名称、年份、评价

import requests
from lxml import etree
import pymysql

def insert(value):
    db = pymysql.connect(host='localhost',user='root',password='123456',database='python')
 
    cursor = db.cursor()
    sql = "INSERT INTO moviemessage(moviename,score,comment) VALUES (%s, %s, %s)"
    try:
        cursor.execute(sql,value)
        db.commit()
        print('插入数据成功')
    except:
        db.rollback()
        print("插入数据失败")
    db.close()

url='https://movie.douban.com/top250'

hearders={
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.47'
}
resp = requests.get(url,headers=hearders)

#print(resp.text)

#创建etree对象,传入网页内容
#找到最外层xpth,然后嵌套一层循环获取所有电影信息内容
#路径  
  1. tree=etree.HTML(resp.text) #这里li有多个所以返回的是一个列表 the_first=tree.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li') for i in the_first: title=i.xpath('./div/div[1]/a/img/@alt')[0] score=i.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0].strip() comment=i.xpath('./div/div[2]/div[2]/p[2]/span/text()')[0] print(title) print(score) print(comment) #插入到数据库之中 data = (title,score,comment) insert(data)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/323858.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号