爬取豆瓣电影

爬虫学习

爬取网站的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,然后嵌套一层循环获取所有电影信息内容
#路径  <ol> <li> <div class='item> <div class='pic'> <a alt>
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,然后嵌套一层循环获取所有电影信息内容
#路径  <ol> <li> <div class='item> <div class='pic'> <a alt>
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)


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值