昨天学习了使用Python爬取网页上的图片,今天我们来学习使用Python爬取电影网站排名信息保存到本地Excel中,下面以豆瓣电影网为例:
首先我们的需求是爬取1-10页的每个电影信息,包括排名,电影名称,导演,评分,评语等
下面来分析一下豆瓣电影Top250的页面:
一页数据25条,每一个item对应到html里的一条
每个页面跳动25,也就是说他的步长为25,这样就好办了
for x in range(0,226,25):
创建一个Excel,保存到你项目的同一个目录
下面就开始详细写代码吧:
首先还是导入几个包:
import requests
from lxml import etree
import csv
第一部电影的详细定位:
rank = div.xpath('div[1]/em/text()')[0]
#电影名称
movie_name = div.xpath('div[2]/div[1]/a/span/text()')
#导演
director = div.xpath('div[2]/div[2]/p/text()')
#评分
grade = div.xpath('div[2]/div[2]/div/span[2]/text()')[0]
#短评
#replace():把**字符替换成**
comment_num = div.xpath('div[2]/div[2]/div/span[4]/text()')[0].replace("人评价","")
完整代码:
import requests
from lxml import etree
import csv
f = open("movie.csv","w",encoding="GB18030",newline="")
writer = csv.DictWriter(f,fieldnames=["电影排名","电影名称","演员表","电影评分","电影评论数","电影短评"])
writer.writeheader()
#拼接网址,发起请求
for x in range(0,226,25):
#拼接出来每一页的地址
url = "https://movie.douban.com/top250?start={}&filter=".format(x)
print("正在爬取--{}--网址的数据".format(url))
response = requests.get(url=url)
html_obj = etree.HTML(response.text)
div_list = html_obj.xpath('//div[@class="item"]')
for div in div_list:
rank = div.xpath('div[1]/em/text()')[0]
movie_name = div.xpath('div[2]/div[1]/a/span/text()')
director = div.xpath('div[2]/div[2]/p/text()')
grade = div.xpath('div[2]/div[2]/div/span[2]/text()')[0]
#replace():把**字符替换成**
comment_num = div.xpath('div[2]/div[2]/div/span[4]/text()')[0].replace("人评价","")
#因为有的电影没有短评,强行匹配短评会报错!
try:
short_comment = div.xpath('div[2]/div[2]/p[2]/span/text()')[0]
except Exception as e:
short_comment="没有短评"
#定义一个字符串,存储清理过后的电影名称
movie_name_string = ''
for movie in movie_name:
#把电影名称中的\xa0替换成空,然后把处理过后的电影名称拼接起来
movie_name_string+=movie.replace("\xa0","")
#定义一个字符串,存储清理过后的导演信息
movie_director_string = ''
for movie_director in director:
movie_director_string+=movie_director.replace('\n',"").replace("\xa0","").replace(" ","")
movie_dict = {"电影排名":rank,"电影名称":movie_name_string,"演员表":movie_director_string,"电影评分":grade,"电影评论数":comment_num,"电影短评":short_comment}
#一次写入一行数据
writer.writerow(movie_dict)
f.close()
豆瓣可能有时候设置反爬虫机制,数据有时候会爬不下来
换个IP地址就好了,就是换个网,连手机wife也行哦!
运行后就可以去本地看数据了!
可以看到一共250条数据
**
**