python爬取豆瓣电影top250

网友投稿 644 2022-09-22

python爬取豆瓣电影top250

python爬取豆瓣电影top250

1、分析网页

for page in range (0,226,25):

url ="https://movie.douban.com/top250?start=%s&filter="%page

print (url)

2、请求服务器

在爬取网页之前,我们要向服务器发出请求

2.1导入包

没有安装requests包的要先进行安装,步骤为:1.win+R运行——2.cmd回车——3.输入命令pip install requests

2.2设置浏览器代理

headers = {

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

}

2.3请求服务器格式

请求源代码,向服务器发出请求,如果在后面加上.text表示输出文本内容,代码如下图所示:

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

2.4请求服务器代码汇总

import requests

#pip安转 pip install requests————>win+r,运行————>cmd,回车,————>pip

test_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/80.0.3987.149 Safari/537.36'

}

#请求源代码,向服务器发出请求,200代表成功

reponse = requests.get(url = test_url, headers = headers).text

# 快捷键运行,Ctrl+Enter

3.xpath提取信息

3.1获取xpath节点的方法

3.2xpath提取内容

from lxml import etree #导入解析库

html_etree = etree.HTML(reponse) # 看成一个筛子,树状

3.2.1提取文本

当我们在提取标签内的文本时,要在复制的xpath后面加上/text()

如《霸王别姬》:

霸王别姬

xpath为:

//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]

提取文字:

name = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/span[1]/text()')

print ("这是数组形式:",name)

print ("这是字符串形式:",name[0])

3.2.2提取链接

我们在提取链接时,需要在复制到的xpath后面加上/@href , 指定提取链接,

movie_url = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[1]/a/@href')

print ("这是数组形式:",movie_url)

print ("这是字符串形式:",movie_url[0])

3.2.3提取标签元素

提取标签元素和提取链接的方法一样,不过要在后面加上 /@class 就可以了,

rating = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li[1]/div/div[2]/div[2]/div/span[1]/@class')

print ("这是数组形式:",rating)

print ("这是字符串形式:",rating[0])

4.正则表达式

4.1提取固定位置的信息

正则表达式中用(.*?)来提取我们想要的信息,在使用正则表达式时,通常要先导入re这个包,举例如下:

import re

test = "我是js"

text = re.findall("我是.*?",test)

print (text)

4.2匹配出数字

比如说我们要匹配出有多少人评价这部电影,我们可以这样写:

import re

data = "1059232人评价"

num = re.sub(r'\D', "", data)

print("这里的数字是:", num)

5、提取一页中的所有信息

比如说我们这里提取最后一页的电影名称,如下:

li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')

for item in li:

name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]

print (name)

6、把内容写入文本csv

代码如下:

import csv

# 创建文件夹并打开

fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')

writer = csv.writer(fp) #我要写入

# 写入内容

writer.writerow(('排名', '名称', '链接', '星级', '评分', '评价人数'))

#关闭文件

fp.close()

7、把所有代码汇总

import requests, csv, re

from lxml import etree

#设置浏览器代理,它是一个字典

headers = {

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

}

# 创建文件夹并打开

fp = open("./豆瓣top250.csv", 'a', newline='', encoding = 'utf-8-sig')

writer = csv.writer(fp) #我要写入

# 写入内容

writer.writerow(('排名', '名称', '链接', '星级', '评分', '评价人数'))

for page in range(0, 226, 25): #226

print ("正在获取第%s页"%page)

url = 'https://movie.douban.com/top250?start=%s&filter='%page

#请求源代码,向服务器发出请求,200代表成功,回退对其,Ctrl+]

reponse = requests.get(url = url, headers = headers).text

# 快捷键运行,Ctrl+Enter

html_etree = etree.HTML(reponse) # 看成一个筛子,树状

# 过滤

li = html_etree.xpath('//*[@id="content"]/div/div[1]/ol/li')

for item in li:

#排名

rank = item.xpath('./div/div[1]/em/text()')[0]

#电影名称

name = item.xpath('./div/div[2]/div[1]/a/span[1]/text()')[0]

#链接

dy_url = item.xpath('./div/div[2]/div[1]/a/@href')[0]

#评分

rating = item.xpath('./div/div[2]/div[2]/div/span[1]/@class')[0]

rating = re.findall('rating(.*?)-t', rating)[0]

if len(rating) == 2:

star = int(rating) / 10 #int()转化为数字

else:

star = rating

# 注释ctrl+?

rating_num = item.xpath('./div/div[2]/div[2]/div/span[2]/text()')[0]

content = item.xpath('./div/div[2]/div[2]/div/span[4]/text()')[0]

content = re.sub(r'\D', "", content)

# print (rank, name, dy_url, star, rating_num, content)

# 写入内容

writer.writerow((rank, name, dy_url, star, rating_num, content))

fp.close()

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:unix、linux下的系统性能监控工具nmon
下一篇:sprintf
相关文章

 发表评论

暂时没有评论,来抢沙发吧~