爬是爬完了,运行也运行出来了,但是有问题。
因为同一个电影,会有多个译名,所以爬出来,电影名错位了,找了半天也没发现问题所在所以来求助了。
# -*- coding:utf-8 -*-
# author: yukun
import requests
from bs4 import BeautifulSoup
# 发出请求获得HTML源码的函数
def get_html(url):
# 伪装成浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
resp = requests.get(url, headers=headers).text
return resp
# 解析页面,获得数据信息
def html_parse():
# 调用函数,for循环迭代出所有页面
for url in all_page():
# BeautifulSoup的解析
soup = BeautifulSoup(get_html(url), 'html.parser')
# 电影名
alldiv = soup.find_all('span', class_='title')
names = [a.get_text() for a in alldiv]
# 导演
allp = soup.find_all('p', class_='')
authors = [p.get_text() for p in allp]
# 评分
starspan = soup.find_all('span', class_='rating_num', property='v:average')
scores = [s.get_text() for s in starspan]
# 简介
sumspan = soup.find_all('span', class_='inq')
sums = [i.get_text() for i in sumspan]
for name, author, score, sum in zip(names, authors, scores, sums):
name = '电影名:' + str(name) + '\n'
author = '导演:' + str(author) + '\n'
score = '评分:' + str(score) + '\n'
sum = '简介:' + str(sum) + '\n'
data = name + author + score + sum
# 保存数据
f.writelines(data + '=======================' + '\n')
# 获得所有页面的函数
def all_page():
base_url = 'https://movie.douban.com/top250?start='
last_url ='&filter='
urllist = []
# 从0到225,间隔25的数组
for page in range(0, 250, 25):
allurl = base_url + str(page) + last_url
urllist.append(allurl)
return urllist
# 文件名
filename = '豆瓣电影Top250.txt'
# 保存文件操作
f = open(filename, 'w', encoding='utf-8')
# 调用函数
html_parse()
f.close()
想问下,怎解决?
我自己觉得是这一块出现了问题:
# 电影名
alldiv = soup.find_all('span', class_='title')
names = [a.get_text() for a in alldiv]
因为我单拎出来,跑了跑发现,结果是这样的:
[<span class="title">肖申克的救赎</span>, <span class="title"> / The Shawshank Redemption</span>, <span class="title">霸王别姬</span>, <span class="title">阿甘正传</span>, <span class="title"> / Forrest Gump</span>, <span class="title">这个杀手不太冷</span>, <span class="title"> / Léon</span>, ...
['肖申克的救赎', '\xa0/\xa0The Shawshank Redemption', '霸王别姬', '阿甘正传', '\xa0/\xa0Forrest Gump', '这个杀手不太冷', '\xa0/\xa0Léon'...
按理说
肖申克的救赎和The Shawshank Redemption是同一部电影的两种译名,应该是放在一块的,但是被拆分开了,我觉得是这个原因导致的错位,可是我不知道如何修改,谁能指点我一下呀