Итак, первое, что я вижу, это то, что вы пытаетесь перебрать свой Containers
объект, но никогда не сохраняли это как что-либо.Таким образом, вам нужно сохранить это, прежде чем выполнять итерацию.
надеюсь, кто-то опубликует более надежное решение, но с точки зрения того, что извлекается и что вы запрашиваете в качестве вывода, это потянет егос этой конкретной страницы.Есть несколько частей, которых нет, поэтому я должен был учесть их, и если их там не было, просто ноль.Тем не менее, это должно помочь вам:
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
import pandas as pd
results = pd.DataFrame()
my_url='https://www.chembid.com/results/?q=124-07-2&sort=price'
# opening up connection grapping the page
uClient=uReq(my_url)
page_html=uClient.read()
uClient.close()
#html parser
page_soup=soup(page_html,"html.parser")
containers = page_soup.find_all('div', {'class':"result-horizontal-wrapper"})
for container in containers:
name = container.div.div.span.text
if container.find('a' , {'class':'supplier'}):
supplier = container.find('a' , {'class':'supplier'}).text
else:
supplier = 'n/a'
span_cas_qulity = container.find_all('span', {'class':'regular-small-font block'})
cas_no = [x.text for x in span_cas_qulity if 'CAS' in x.text]
quality = [x.text for x in span_cas_qulity if 'Quality/Grade' in x.text]
if cas_no != []:
cas_no = cas_no[0]
else:
cas_no = None
if quality != []:
quality = quality[0]
else:
quality = None
span_price = container.select('span.black-bold-font-big')[0].text
span_rate = container.select('span.block.regular-small-font.price')[0].text
temp_df = pd.DataFrame([[name, supplier, cas_no, quality, span_price, span_rate]], columns = ['name','supplier','cas_no','quality','price','rate'])
results = results.append(temp_df).reset_index(drop = True)