python - 网络抓取的列表索引超出范围
问题描述
我的代码有列表索引超出范围错误。
import requests
from bs4 import BeautifulSoup
import re
import pyperclip
# import pandas as pd
import csv
# Get a name of the agency
def getAgency(pageURL):
res = requests.get(pageURL)
res.raise_for_status()
soup = BeautifulSoup(res.text, 'html.parser')
elems = soup.select('h3.company-name > a')
names = []
for i in range(len(elems)):
names.append(str(elems[i].text.strip()))
return names
def getWebsite(pageURL):
res = requests.get(pageURL)
res.raise_for_status()
soup = BeautifulSoup(res.text, 'html.parser')
elems = soup.select('li.website-link.website-link-a > a')
sites = []
for elem in elems:
if elem.find('/your-project') != -1:
elems.remove(elem)
else:
pass
for i in range(len(elems)):
sites.append(str(elems[i]["href"]))
return sites
allNames = []
for pagenumber in range(0,1):
names = getAgency('https://clutch.co/agencies/digital?page=' + str(pagenumber))
allNames += names
allSites = []
for pagenumber in range(0,1):
sites = getWebsite('https://clutch.co/agencies/digital?page=' + str(pagenumber))
allSites += sites
final = []
with open('text.csv', 'w', newline='') as f:
a = csv.writer(f, delimiter=',')
for index in range(len(allNames)):
final.append(",".join([allNames[index].replace(",", " "), allSites[index]]))
a.writerows(final)
finalresult = "\n".join(final)
pyperclip.copy(finalresult)
我知道是什么导致了这个错误,这个 if 语句。
for elem in elems:
if elem.find('/your-project') != -1:
elems.remove(elem)
else:
pass
当我从列表中删除一个项目时,索引号减少 1。因此,在这个 for 循环中,索引将是 allNames 的长度,并且我使用与 allSites 相同的索引。因此,当索引将是 allNames 的最后一项时,allSites 将抛出错误,因为它超出了范围。我能做些什么来解决这个问题?
for index in range(len(allNames)):
final.append(",".join([allNames[index].replace(",", " "), allSites[index]]))
a.writerows(final)
解决方案
您需要在一次迭代中解析代码并吐出成对的名称和站点,然后过滤以丢弃这些对。
由于您的代码现在是列表,因此在您尝试通过“/您的项目”过滤它们之前,列表的长度甚至不一样,因为有与“li.website-link.wibise-link-a > a”匹配的广告链接
推荐阅读
- php - 用 PHP 替换基于 URL 参数的页面内容
- mysql - 在 Eclipse 中将 mySQL 连接到 java 时,找不到适用于 jdbc//mysql://localhost:3306/nishadagar 的驱动程序
- angular - 对输入字段同时使用 value 和 ngModel 不起作用?
- python - flask_login 中的 current_user 返回 NoneType
- c# - 设置 UWP 目标系统
- ruby-on-rails - 如何为表中的列中的特定值创建方法?
- php - 当 SQL 字符串具有“%f”时,Wordpress wpdp->getResults 不执行我的 sql
- ios - 将 Flutter 集成到 CocoaTouch SDK 中?
- system-verilog - 将 8 位值传递给 1 位端口?
- protocol-buffers - 如何将 OpenAPI Spec (Swagger 2.0) 转换为 proto3?