python爬虫用 beautifulsoup 解析,有时候会出现 list out of range , 但是代码不变情况下,有时候也能运行。输出的列表均为空
import requestsfrom bs4 import BeautifulSoupheaders = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'}response=requests.get("https://www.iqiyi.com/ranks1/3/0",headers=headers)print(response.status_code)response=response.textsoup= BeautifulSoup(response,"html.parser")print(soup)all_titles = soup.find_all("div", attrs={"class": "rvi__tit1"})print("jil")def get_title(): try: all_titles = soup.find_all("div", attrs={"class": "rvi__tit1"}) title = [] for titles in all_titles: title2 = titles.get_text().strip() title.append(title2) return title[0:10] except IndexError: passdef get_heat(): try: soup = BeautifulSoup(response, "html.parser") all_heat = soup.find_all("span", attrs={"class": "rvi__index__num"}) heat = [] for heat1 in all_heat: heat.append(heat1.get_text().strip()) return heat[0:10] except IndexError: passdef get_introduction(): all_introduction = soup.find_all("p", attrs={"class": "rvi__des2"}) introduction = [] for introduction1 in all_introduction: introduction.append(introduction1.get_text().strip()) return introduction[0:10] # 爬取前10def list_show(): tplt = "{0:{3}^10}\t{1:{3}^6}\t{2:{3}^20\t{3:{3}^60}}" ## {1:{3}^10} 1表示位置,{3}表示用第3个参数来填充,^表示居中,10表示占10个位置 #print(tplt.format('排名', '剧名', '热度', chr(12288))) lt = [] for i in range(10): # 输出前25组数据 tplt1 = "{0:{3}^10}\t{1:{3}^6}\t{2:{3}^20\t{3:{3}^60}}" lt.append([i +1, get_title()[i], get_heat()[i],get_introduction()[i]]) return ltif __name__ == '__main__': print(get_title()) print(get_heat()) print(get_introduction()) list_show()
输出statu_code 是 200, 也输出了soup ,但是就是列表返回不出数据
当get_title()返回的数组长度不够10个,你的程序一定会报错:数组地址越界。
看下面这段逻辑,如果get_title()返回的数组只有5个,此时如果i=7, get_title()[7]
一定会抛出异常。
for i in range(10): ...... lt.append([i +1, get_title()[i], get_heat()[i],get_introduction()[i]])
在Python爬虫中,出现“list out of range”错误通常意味着你试图访问一个列表中不存在的索引。在你的代码中,这个错误可能是由于以下几个原因引起的:
find_all
方法返回一个空列表。BeautifulSoup
无法解析出你期望的元素。为了解决这个问题,你可以尝试以下几个方法:
在你的代码中,get_title()
, get_heat()
, 和 get_introduction()
函数在列表为空时没有返回任何值,这可能导致list_show()
函数在尝试访问这些列表时抛出“list out of range”错误。你可以在这些函数中添加适当的异常处理来避免这个问题。例如:
def get_title(): try: all_titles = soup.find_all("div", attrs={"class": "rvi__tit1"}) if not all_titles: return [] # 返回一个空列表而不是不返回任何值 title = [] for titles in all_titles: title2 = titles.get_text().strip() title.append(title2) return title[0:10] except IndexError: return [] # 在发生IndexError时返回一个空列表# 对get_heat()和get_introduction()函数也进行类似的修改
这样,即使find_all
方法返回一个空列表,你的函数也会返回一个空列表,而不是不返回任何值,从而避免“list out of range”错误。
原始content: decode('utf-8')报错: UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 1: invalid continuation byte decode('utf-8', 'ignore'): decode('gbk', 'ignore'): decode('utf-16', 'ig
本文向大家介绍python爬虫爬取网页数据并解析数据,包括了python爬虫爬取网页数据并解析数据的使用技巧和注意事项,需要的朋友参考一下 1.网络爬虫的基本概念 网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。 只要浏览器能够做的事情,原则上,爬虫都能够做到。 2.网络爬虫的功能 网络爬虫可以代替手工做很多事情,比如可以
本文向大家介绍Python爬虫爬取、解析数据操作示例,包括了Python爬虫爬取、解析数据操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python爬虫爬取、解析数据操作。分享给大家供大家参考,具体如下: 爬虫 当当网 http://search.dangdang.com/?key=python&act=input&page_index=1 获取书籍相关信息 面向对象思想 利用不
python应用最多的场景还是web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码识别脚本。 爬虫在开发过程中也有很多复用的过程,这里总结一下,以后也能省些事情。
有的时候,当我们的爬虫程序完成了,并且在本地测试也没有问题,爬取了一段时间之后突然就发现报错无法抓取页面内容了。这个时候,我们很有可能是遇到了网站的反爬虫拦截。 我们知道,网站一方面想要爬虫爬取网站,比如让搜索引擎爬虫去爬取网站的内容,来增加网站的搜索排名。另一方面,由于网站的服务器资源有限,过多的非真实的用户对网站的大量访问,会增加运营成本和服务器负担。 因此,有些网站会设置一些反爬虫的措施。我
主要内容:认识爬虫,爬虫分类,爬虫应用,爬虫是一把双刃剑,为什么用Python做爬虫,编写爬虫的流程网络爬虫又称网络蜘蛛、网络机器人,它是一种按照一定的规则自动浏览、检索网页信息的程序或者脚本。网络爬虫能够自动请求网页,并将所需要的数据抓取下来。通过对抓取的数据进行处理,从而提取出有价值的信息。 认识爬虫 我们所熟悉的一系列搜索引擎都是大型的网络爬虫,比如百度、搜狗、360浏览器、谷歌搜索等等。每个搜索引擎都拥有自己的爬虫程序,比如 360 浏览器的爬虫称作 360Spider,搜狗的爬虫叫做