老师您好,这段代码运行后,excel中是空白文档,无内容填充,代码运行没有报错,请问是什么原因?谢谢

来源:1-1 什么是爬虫

wangyu90

2021-03-26 16:11:23

相关代码:

import requests
from bs4 import BeautifulSoup
import pandas as pd
headers = {'user-agent': 'my-app/0.0.1'}
movie_names = []
movie_links = []
all_informations=[]
def get_list(soup_list):
list = []
for element in soup_list:
list.append(element.text)
return list
# 原理逻辑
# 1、访问主页面,并实现页面的跳转
def get_page(page_link):
page = 0 # 定义一个变量page,含义对应上述的数量字符,并定义初始数为0
max_page = 225 # 定义一个变量max_page,定义跳转页面的最大值为225
while page <= max_page:
# 访问豆瓣top250页面
url = page_link+"?start="+page.__str__() + "&filter="
response= requests.get(url=url, headers=headers) # 赋予一个response值,作为输出
get_link(response)
# print(response.text) # 打印出页面看是否成功
page += 25
print(url) #打印当前页面的链接

# 2、抓取每个页面的所有电影名称和链接
def get_link(response):
soup = BeautifulSoup(response.text, 'html.parser') # 赋予一个soup值,作为美化网页的对象
# print(soup.prettify()) # 网页格式化
# print(soup.find_all(class_="hd")) # 获取当前页面所有的电影名称以及对应的链接
for element in soup.find_all(class_="hd"):
movie_names.append(element.find(class_="title").text)
movie_links.append(element.find("a", href=True).attrs['href']) #每循环1次,将信息存储到上方的全局变量中

# 3、根据链接,抓取每个电影的详细内容

# 利用链接访问网页,获取信息
def get_information(url):
response = requests.get(url=url, headers=headers) # 赋予一个response值,作为输出
# print(response.text)
# 美化网页
soup = BeautifulSoup(response.text, 'html.parser') # 赋予一个soup值,作为美化网页的对象
#print(soup.prettify()) # 网页格式化
# 查找影片的相关信息
# 需要定义一个存储容器,将下述各元素封装在一起,字典类型,键/值对
movie_information={}
try:
movie_information['title'] = soup.find(property="v:itemreviewed").text # 网页信息的字符格式改成文本形式
movie_information['director'] = soup.find(rel="v:directedBy").text
writer=soup.find_all(class_="attrs")
movie_information['writer'] =get_list(soup.find_all(class_="attrs")[1].find_all('a')) if len(writer)>1 else "" # 所有的class="attrs"查找出来,编剧排在第二位
movie_information['actors']=get_list(soup.find_all(rel="v:starring")) # 需要定义一个函数,将所有的演员信息全部搜寻出来
movie_information['genra']=get_list(soup.find_all(property="v:genre")) #影片类型(多个),调用get_list函数
movie_information['country']=soup.find(text="制片国家/地区:").next_element # 所有的class="pl"查找出来,制片国家排在第三位
movie_information['language']=soup.find(text="语言:").next_element # 所有的class="pl"查找出来,语言排在第四位
movie_information['shangying_date']=soup.find(property="v:initialReleaseDate").text
movie_information['pianchang']=soup.find(property="v:runtime").text
movie_information['pingfen']=soup.find(property="v:average").text
movie_information['pingjia']=soup.find(property="v:votes").text
for key in movie_information:
print(key, ":", movie_information.get(key))
except AttributeError:
print("电影已下架")
all_informations.append(movie_information)

if __name__ == '__main__': #程序从此处开始运行
get_page(page_link="https://movie.douban.com/top250")
for name,link in zip(movie_names, movie_links): #上方的存储添加过程全部遍历完毕后,再执行此项程序
print(name,":",link)
get_information(link)
data=pd.DataFrame(all_informations)
data.to_excel("豆瓣250部高分电影.xlsx")


写回答

1回答

DeltaF

2021-03-27

截图吧,这里我看不清逻辑关系,最简单,你打印一下存入csv的data,看看里面有没有东西,一点点往上摸就可以了,还不行就qq群里发一下脚本哈

0

人人都能学的数据分析

从0开始学数据分析,未来互联网各岗位的标配技能,产品经理、运营经理、技术人员人人必备,人人必会的的实用技能

1402 学习 · 1133 问题

查看课程