我正试图为所有NSN搜索此站点 https://www.iso-group.com/fsg/Mechanical-Power-Transmission-Equipment/Gears-Pulleys-Sprockets-Transmission-Chain/3020_GEAR-SPUR/1 使用以下代码
import requests
from bs4 import BeautifulSoup
import urllib3
from datetime import datetime, timedelta
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
f = open("GEAR SPUR.csv", "w")
headers = "NSN, Part_Name, \n"
f.write(headers)
for page in range(69):
NSNurl = 'https://www.iso-group.com/fsg/Gears-Pulleys-Sprockets-Transmission-Chain/Mechanical-Power-Transmission-Equipment/3020_GEAR-SPUR/'.format(page)
uClient = requests.get(NSNurl)
page_html = uClient.content
# close client
uClient.close()
page_soup = soup(page_html, "html.parser")
container = page_soup.find_all("table", {"class": "table table-hover table-responsive"})
for container1 in container: #container1 is <td> element
NSN = container1.find('td')
nsn = container1.find('a') #get the anchor from the <td>
if nsn is not None: #if an anchor is found
NSN = nsn.contents[0]
print(nsn.contents[0]) #print it
else:
Nomenclature = container1.text
print(NSN)
f.write(NSN + "," + Nomenclature.replace(",",""))
f.close()
它仅适用于第一个数字,它返回的是一遍又一遍的相同数字。这些是我终止之前的输出
3020-00-449-0495 - 3020004490495
3020-00-449-0495 - 3020004490495
3020-00-449-0495 - 3020004490495
3020-00-449-0495 - 3020004490495
3020-00-449-0495 - 3020004490495
3020-00-449-0495 - 3020004490495
3020-00-449-0495 - 3020004490495
3020-00-449-0495 - 3020004490495
3020-00-449-0495 - 3020004490495
3020-00-449-0495 - 3020004490495
为什么要这样做?如何修复它以返回所有数字?
答案 0 :(得分:0)
您的网址在字符串中没有占位符供您的网页编号使用。您需要在字符串中包含{}
,否则.format(page)
不会执行任何操作。目前您的网址永远不会更改。根据您的评论,将您的网址更改为
NSNurl = 'https://www.iso-group.com/fsg/Gears-Pulleys-Sprockets-Transmission-Chain/Mechanical-Power-Transmission-Equipment/3020_GEAR-SPUR/{}'.format(page)
花括号作为占位符,当你执行.format
时,会为占位符替换值。有关格式化字符串的详细信息,请查看here。
我也会看到罗马在解决标记方面的答案
您可能遇到的另一个问题是您获取NSN / nsn /命名法的实际代码有点难以解密,并且只有在nsn is None
时才会实际保存到您的csv,即使您正在打印输出对于这两种情况。
希望这足以帮助您修复代码。如果您仍有问题,请澄清问题。
答案 1 :(得分:0)
你在这一行中遇到的另一个问题是:
container = page_soup.find_all("table", {"class": "table table-hover table-responsive"})
您正在尝试遍历container
,但它的长度为1。
您可能应该像这样修改一行:
container = page_soup.find("table", {"class": "table table-hover table-responsive"}).find_all('tr')