一、必备工具
首先,需要在本地安装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”的项目:
创建好如下:
创建一个Python文件,命名为“dbvedie.py,:,引用类库requests,若是未有,在终端terminal中进行安装,具体展示如下:
安装完毕之后,在py的文件中,执行import requests,如下展示:
打开豆瓣网,https://www.douban.com/,点击【电影】,点击【排行榜】,如下:
下滑,点击电影的排行版数,访问的路径为:https://movie.douban.com/top250 具体如下:
点击第二页时,访问路径为: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下查看路径,具体如下展示:
复制网页内容,粘贴到搜索栏中,点击刷新的图标,查找访问的路径:
根据搜索出结果,查看结果信息,获取路径【URL】和请求头【User-Agent】具体如下:
dbvedio.py中添加路径【URL】和请求头【User-Agent】,传入url 和 headers,具体如下:
定义一个参数,获取请求结果的数据(从路径和请求头中获取):
将结果转换为HTML格式(应用到etree):
定义一个电影的大盒子,并获取大盒子中的数据格式,采用到路径xpath;首先从浏览器中获取到大盒子的信息,具体如下,点击【Elements】,采用箭头获取到盒子信息,具体如下:
定义一个盒子,装每部电影的数据,如下展示:
从大盒子中获取每一部的电影数据,并把它放在字典中,定义一个数据字典,具体如下:
获取到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'),获取数据位置信息如下:
将数据存放到字典中,具体如下:
VedioDict['title'] =title VedioDict['otherTitle']=otherTitle VedioDict['link'] =link
VedioDict['content'] =content VedioDict['star'] =star
将数据存储放置到VedioList中,并通过创建一个dbvedio.csv的文件进行存储可查看:
执行所有结果之后,展示如下成功:
可在左边目录中找到“dbvedio.csv”的文件,打开后可查看到抓取的内容,具体展示如下:
可在目录结果中,查看csv中的内容:
所执行的代码如下:
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)