IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python爬取豆瓣T250电影及保存excel(易上手) -> 正文阅读

[Python知识库]python爬取豆瓣T250电影及保存excel(易上手)

作者:recommend-item-box type_blog clearfix

网址:豆瓣电影 Top 250


目录

一.bs4和re正则爬取

二.xpath爬取


?

一.bs4和re正则爬取

源代码:

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

baseurl = "https://movie.douban.com/top250?start="
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}

title = re.compile('<span class="title">(.*?)</span>')  #标题
link = re.compile('<a class="" href="(.*?)"')  #电影链接
introduction = re.compile('<span class="inq">(.*?)</span>')  #电影简介
appraise = re.compile('<span>(.*?)</span>')  #评价人数
basedata = []  #最后写入到excel中,利用列表来写入
workbook = xlwt.Workbook(encoding='utf-8')  #新建excel文档
worksheet = workbook.add_sheet('daoban')  #excel文档中添加表格


for i in range(0,10):
    url = url = baseurl+str(i*25)
    #请求网页
    request = urllib.request.Request(url=url,headers=head)
    #得到网页回应并打开
    response = urllib.request.urlopen(request)
    #对打开的网页回应并解码到utf-8(有中文)
    html = response.read().decode("utf-8")
    # print(html)  #字符类型的html
    soup = BeautifulSoup(html,"html.parser")  #后面是html。parser 解析器

    for item in soup.find_all('div',class_="info"):
        item = str(item)
        data = []  #每一部电影有多个,每部电影放入一个列表中

        ftitle = re.findall(title,item)
        if len(ftitle) == 2:
            etitle = ftitle[0]
            data.append(etitle)
            rtitle = ftitle[1].replace("/","")#去点无关符号
            data.append(rtitle)
        else:
            data.append(ftitle[0])
            data.append(' ')#外国名留空  #有的会没有外国电影,防止串行

        flink = re.findall(link,item)[0]
        data.append(flink)
        # print(data)
        # fintroduction = re.findall(introduction,item)[0]#有的电影没有概述
        fintroduction = re.findall(introduction, item)
        if len(fintroduction) != 0:
            fintroduction = fintroduction[0].replace("。","")#取代最后面的句号
            data.append(fintroduction)
        else:
            data.append(" ")
            data.append(fintroduction)
        fappraise = re.findall(appraise,item)[0]
        data.append(fappraise)
        basedata.append(data)  #单个电影信息的列表加入到一个大列表中

for i in range(0,250):
    print("第%d条记录"%i)
    first = basedata[i]
    for j in range(0,4):
        second = first[j]
        worksheet.write(i,j,second)  #每个列表中保存数据

workbook.save('豆瓣.xls')  #保存excel文档

print(basedata)

1.请求网页并且获取网页源代码的代码实现:

import urllib.request,urllib.error

baseurl = "https://movie.douban.com/top250?start="
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}

#for循环来进行页面跳转
for i in range(0,10):
    url = url = baseurl+str(i*25)
    #请求网页
    request = urllib.request.Request(url=url,headers=head)
    #得到网页回应并打开
    response = urllib.request.urlopen(request)
    #对打开的网页回应并解码到utf-8(有中文)
    html = response.read().decode("utf-8")
    # print(html)

2.对拿到的源代码的取其中的想要的电影标题,链接等

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

baseurl = "https://movie.douban.com/top250?start="
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}

title = re.compile('<span class="title">(.*?)</span>')  #标题
link = re.compile('<a class="" href="(.*?)"')  #电影链接
introduction = re.compile('<span class="inq">(.*?)</span>')  #电影简介
appraise = re.compile('<span>(.*?)</span>')  #评价人数
basedata = []  #最后写入到excel中,利用列表来写入

for i in range(0,10):
    url = url = baseurl+str(i*25)
    #请求网页
    request = urllib.request.Request(url=url,headers=head)
    #得到网页回应并打开
    response = urllib.request.urlopen(request)
    #对打开的网页回应并解码到utf-8(有中文)
    html = response.read().decode("utf-8")
    # print(html)  #字符类型的html
    soup = BeautifulSoup(html,"html.parser")  #后面是html。parser 解析器

    for item in soup.find_all('div',class_="info"):
        item = str(item)
        data = []  #每一部电影有多个,每部电影放入一个列表中

        ftitle = re.findall(title,item)
        if len(ftitle) == 2:
            etitle = ftitle[0]
            data.append(etitle)
            rtitle = ftitle[1].replace("/","")#去点无关符号
            data.append(rtitle)
        else:
            data.append(ftitle[0])
            data.append(' ')#外国名留空  #有的会没有外国电影,防止串行

        flink = re.findall(link,item)[0]
        data.append(flink)
        # print(data)
        # fintroduction = re.findall(introduction,item)[0]#有的电影没有概述
        fintroduction = re.findall(introduction, item)
        if len(fintroduction) != 0:
            fintroduction = fintroduction[0].replace("。","")#取代最后面的句号
            data.append(fintroduction)
        else:
            data.append(" ")
            data.append(fintroduction)
        fappraise = re.findall(appraise,item)[0]
        data.append(fappraise)
        basedata.append(data)  #单个电影信息的列表加入到一个大列表中

print(basedata)

3.对拿到的数据写道excle当中

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

baseurl = "https://movie.douban.com/top250?start="
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}

title = re.compile('<span class="title">(.*?)</span>')  #标题
link = re.compile('<a class="" href="(.*?)"')  #电影链接
introduction = re.compile('<span class="inq">(.*?)</span>')  #电影简介
appraise = re.compile('<span>(.*?)</span>')  #评价人数
basedata = []  #最后写入到excel中,利用列表来写入
workbook = xlwt.Workbook(encoding='utf-8')  #新建excel文档
worksheet = workbook.add_sheet('daoban')  #excel文档中添加表格


for i in range(0,10):
    url = url = baseurl+str(i*25)
    #请求网页
    request = urllib.request.Request(url=url,headers=head)
    #得到网页回应并打开
    response = urllib.request.urlopen(request)
    #对打开的网页回应并解码到utf-8(有中文)
    html = response.read().decode("utf-8")
    # print(html)  #字符类型的html
    soup = BeautifulSoup(html,"html.parser")  #后面是html。parser 解析器

    for item in soup.find_all('div',class_="info"):
        item = str(item)
        data = []  #每一部电影有多个,每部电影放入一个列表中

        ftitle = re.findall(title,item)
        if len(ftitle) == 2:
            etitle = ftitle[0]
            data.append(etitle)
            rtitle = ftitle[1].replace("/","")#去点无关符号
            data.append(rtitle)
        else:
            data.append(ftitle[0])
            data.append(' ')#外国名留空  #有的会没有外国电影,防止串行

        flink = re.findall(link,item)[0]
        data.append(flink)
        # print(data)
        # fintroduction = re.findall(introduction,item)[0]#有的电影没有概述
        fintroduction = re.findall(introduction, item)
        if len(fintroduction) != 0:
            fintroduction = fintroduction[0].replace("。","")#取代最后面的句号
            data.append(fintroduction)
        else:
            data.append(" ")
            data.append(fintroduction)
        fappraise = re.findall(appraise,item)[0]
        data.append(fappraise)
        basedata.append(data)  #单个电影信息的列表加入到一个大列表中

for i in range(0,250):
    print("第%d条记录"%i)
    first = basedata[i]
    for j in range(0,4):
        second = first[j]
        worksheet.write(i,j,second)  #每个列表中保存数据

workbook.save('豆瓣.xls')  #保存excel文档

print(basedata)


二.xpath爬取


这个我自己使用了几次,好像相比上面那个,更容易被拉黑,谨慎使用吧。

ps:1.好像加上time.sleep(1)可以减缓爬取速度并且不容易被拉黑(需要(import time)导入包)

? ? ? ? 2.请求打开网页最后要关闭网页(requ.close())

? ? ? ? ?

源代码:

import requests
from lxml import etree
import xlwt
workbook = xlwt.Workbook(encoding='utf-8')  #新建一个excel文档
worksheet = workbook.add_sheet('daoban')
data = []       #需要把所有数据放在一个列表中,然后再写入到excel中
baseurl = "https://movie.douban.com/top250?start="
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40"
        }
for i in range(0,10):
    changeurl = baseurl + str(25*i)
    requ = requests.get(url=changeurl,headers=head)  #请求网页数据
    html1 = requ.text  #拿到字符类型的网页源代码
    html = etree.HTML(html1)  #转换成可以使用xpath的类型
    div = html.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li')
    print(html1)
    try:
        for item in div:
            basedata = []  #要把每一部电影的各个信息分开保存,且一个电影为一个小列表
            ftitle = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]  #最后加上text()来获取到文本内容,再加[0]放入列表第一个元素
            basedata.append(ftitle)
            flink = item.xpath('./div/div[2]/div[1]/a/@href')[0]  #最后加上/@href是取节点<a中的href中的内容
            basedata.append(flink)
            fintroduction = item.xpath('./div/div[2]/div[2]/p[2]/span/text()')  #不是所有的都有简介,所以给一个判断看是否存在,不存在的时候添加空格来占个位置
            if len(fintroduction) != 0:
                basedata.append(fintroduction)
            else:
                basedata.append(' ')
                basedata.append(fintroduction)
            data.append(basedata)
    except(IndexError) as e:
        pass
    requ.close()
# 上面把250条记录都保存再同一个列表中,现在写入到excel
for i in range(0,250):
    first = data[i]
    for j in range(0,3):
        second = first[j]
        worksheet.write(i,j,second)

workbook.save('豆瓣T250.xls')

print(data)

1.请求网页并且获取网页源代码的代码实现:

import requests
baseurl = "https://movie.douban.com/top250?start="
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40"
        }
for i in range(0,10):
    changeurl = baseurl + str(25*i)
    requ = requests.get(url=changeurl,headers=head)  #请求网页数据
    html1 = requ.text  #拿到字符类型的网页源代码
    #print(html1)  #检查是否拿到了源代码
    

2.对拿到的源代码的取其中的想要的电影标题,链接等

import requests
from lxml import etree
data = []       #需要把所有数据放在一个列表中,然后再写入到excel中
baseurl = "https://movie.douban.com/top250?start="
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40"
        }
for i in range(0,10):
    changeurl = baseurl + str(25*i)
    requ = requests.get(url=changeurl,headers=head)  #请求网页数据
    html1 = requ.text  #拿到字符类型的网页源代码
    html = etree.HTML(html1)  #转换成可以使用xpath的类型
    div = html.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li')
    print(html1)
    try:
        for item in div:
            basedata = []  #要把每一部电影的各个信息分开保存,且一个电影为一个小列表
            ftitle = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]  #最后加上text()来获取到文本内容,再加[0]放入列表第一个元素
            basedata.append(ftitle)
            flink = item.xpath('./div/div[2]/div[1]/a/@href')[0]  #最后加上/@href是取节点<a中的href中的内容
            basedata.append(flink)
            fintroduction = item.xpath('./div/div[2]/div[2]/p[2]/span/text()')  #不是所有的都有简介,所以给一个判断看是否存在,不存在的时候添加空格来占个位置
            if len(fintroduction) != 0:
                basedata.append(fintroduction)
            else:
                basedata.append(' ')
                basedata.append(fintroduction)
            data.append(basedata)
    except(IndexError) as e:
        pass  #这里使用try excep 异常处理是有的简介之类的没有,添加如上的判读之后就可以不用写try了
    requ.close()



print(data)  #检查是否拿到了想要的数据

3.对拿到的数据写道excle当中

import requests
from lxml import etree
import xlwt
workbook = xlwt.Workbook(encoding='utf-8')  #新建一个excel文档
worksheet = workbook.add_sheet('daoban')
data = []       #需要把所有数据放在一个列表中,然后再写入到excel中
baseurl = "https://movie.douban.com/top250?start="
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36 Edg/95.0.1020.40"
        }
for i in range(0,10):
    changeurl = baseurl + str(25*i)
    requ = requests.get(url=changeurl,headers=head)  #请求网页数据
    html1 = requ.text  #拿到字符类型的网页源代码
    html = etree.HTML(html1)  #转换成可以使用xpath的类型
    div = html.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li')
    print(html1)
    try:
        for item in div:
            basedata = []  #要把每一部电影的各个信息分开保存,且一个电影为一个小列表
            ftitle = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]  #最后加上text()来获取到文本内容,再加[0]放入列表第一个元素
            basedata.append(ftitle)
            flink = item.xpath('./div/div[2]/div[1]/a/@href')[0]  #最后加上/@href是取节点<a中的href中的内容
            basedata.append(flink)
            fintroduction = item.xpath('./div/div[2]/div[2]/p[2]/span/text()')  #不是所有的都有简介,所以给一个判断看是否存在,不存在的时候添加空格来占个位置
            if len(fintroduction) != 0:
                basedata.append(fintroduction)
            else:
                basedata.append(' ')
                basedata.append(fintroduction)
            data.append(basedata)
    except(IndexError) as e:
        pass
    requ.close()
# 上面把250条记录都保存再同一个列表中,现在写入到excel
for i in range(0,250):
    first = data[i]
    for j in range(0,3):
        second = first[j]
        worksheet.write(i,j,second)

workbook.save('豆瓣T250.xls')

print(data)

PS:单独的新建excel文档,写入内容并保存的代码实现

import xlwt

workbook = xlwt.Workbook(encoding='utf-8')  #新建一个excel文档
worksheet = workbook.add_sheet('daoban')   #excel中新建单个表格名字为:douban
worksheet.write(5,4,hello python)   #在表格中的第(5,4)位置添加内容:hello python
workbook.save('hello.xls')  #保存excel文档的名字为hello.xls

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 21:35:32  更:2021-11-14 21:37:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:57:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码