爬虫技术:抓取豆瓣电影数据

一、必备工具

首先,需要在本地安装python,版本3.8多都可行,其次安装编辑器pycharm,可通过官网下载,下载20版的即可,太高的版本破解费劲;

Python下载地址:https://www.python.org/downloads/

pycharm下载地址如下:https://download.jetbrains.com.cn/python/pycharm-professional-2020.3.exe

二、创建Python文件,敲代码

安装完毕之后,打开pycharm,创建一个project的文件,左上角的【File】下创建一个【New Project】,创建一个名为“db_test”的项目:

图1
图2

创建好如下:

图3

创建一个Python文件,命名为“dbvedie.py,:,引用类库requests,若是未有,在终端terminal中进行安装,具体展示如下:

图4

安装完毕之后,在py的文件中,执行import requests,如下展示:

图5

打开豆瓣网,https://www.douban.com/,点击【电影】,点击【排行榜】,如下:

图6

下滑,点击电影的排行版数,访问的路径为:https://movie.douban.com/top250 具体如下:

图7

点击第二页时,访问路径为:https://movie.douban.com/top250?start=25&filter=

点击第三页时,访问路径为:https://movie.douban.com/top250?start=50&filter=       

.......

按照如上的访问,访问第一页的路径为:https://movie.douban.com/top250?start=0&filter=       

打开F12,在终端中查看路径及其代码,在Network下查看路径,具体如下展示:

图8

复制网页内容,粘贴到搜索栏中,点击刷新的图标,查找访问的路径:

图9

根据搜索出结果,查看结果信息,获取路径【URL】和请求头【User-Agent】具体如下:

图10

dbvedio.py中添加路径【URL】和请求头【User-Agent】,传入url 和 headers,具体如下:

图11

定义一个参数,获取请求结果的数据(从路径和请求头中获取):

图12

将结果转换为HTML格式(应用到etree):

图13
图14

定义一个电影的大盒子,并获取大盒子中的数据格式,采用到路径xpath;首先从浏览器中获取到大盒子的信息,具体如下,点击【Elements】,采用箭头获取到盒子信息,具体如下:

图15
图16

定义一个盒子,装每部电影的数据,如下展示:

图17

从大盒子中获取每一部的电影数据,并把它放在字典中,定义一个数据字典,具体如下:

图18
图19

获取到title的内容,可将其先打印出进行查看,具体如下:

图20

同理方式,获取其他标题,othertitle=item.xpath('div[@class="hd"]/a/span/text()')[1]。获取数据位置信息如下:

图21

获取电影导演/主演等简介:content=item.xpath('div[@class="bd"]/p/text()')。获取数据位置信息如下:

图22

获取评分,star=item.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')。获取数据位置信息如下:

图23

获取电影链接:link=item.xpath('div[@class="hd"]/a/@href'),获取数据位置信息如下:

图24

将数据存放到字典中,具体如下:

VedioDict['title'] =title      VedioDict['otherTitle']=otherTitle     VedioDict['link'] =link

VedioDict['content'] =content     VedioDict['star'] =star

图25

将数据存储放置到VedioList中,并通过创建一个dbvedio.csv的文件进行存储可查看:

图26

执行所有结果之后,展示如下成功:

图27

可在左边目录中找到“dbvedio.csv”的文件,打开后可查看到抓取的内容,具体展示如下:

可在目录结果中,查看csv中的内容:

图28

所执行的代码如下:

import requests

from lxmlimport etree

import csv

url='https://movie.douban.com/top250?start=0&filter='

headers={

'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'

}

#定义一个参数,获取请求结果的数据

resp=requests.get(url=url,headers=headers)

#转换为HTML格式

data=etree.HTML(resp.text)

#定义一个大盒子,获取大盒子中的数据

VedioItemList= data.xpath('//div[@class="info"]')

#定义一个盒子,装每部电影的数据

VedioList=[]

#定义一个数据字典

for itemin VedioItemList:

VedioDict={}

#获取电影标题

    title= item.xpath('div[@class="hd"]/a/span/text()')

#print(title)

    #获取电影其他标题

    otherTitle=item.xpath('div[@class="hd"]/a/span/text()')[1]

#获取简介

    content=item.xpath('div[@class="bd"]/p/text()')

#获取评分

    star=item.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')

#获取电影链接

    link=item.xpath('div[@class="hd"]/a/@href')

# print(otherTitle)

    # 数据放置到字典

    VedioDict['title'] =title

VedioDict['otherTitle']=otherTitle

VedioDict['link'] =link

VedioDict['content'] =content

VedioDict['star'] =star

# print(VedioDict)

    VedioList.append(VedioDict)

with open('dbvedio.csv','w',encoding='utf-8',newline='')as f:

writer= csv.DictWriter(f,fieldnames=['title','otherTitle','content','star','link'])

writer.writeheader()

for eachin VedioList:

writer.writerow(each)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容