Beautifulsoup 并修改列表
Beautifulsoup and amending a list
我正在了解我的第一门编程语言,但我在尝试使用 BS4 和 Python 的练习时遇到了一些问题。
如果单击从列表中生成的任何 link,特定公司的 url 将变为:
https://www.aisc.org/certification/certified-company?id=3220678
我想做的是抓取数据,它不是 table 形式,并将其转换为带有公司名称的 excel csv 文件,然后是关于公司的每一行其专栏中的信息(即地址、电话、电子邮件等)。我已经设法将公司名称和公司信息分开,但我无法将公司名称添加到列表中。我在解析公司信息中的标签时也遇到了问题。如果我使用 row+= line.text,那么输出是 row = ['a','d', 'd','r','e',.. .....]
任何帮助将不胜感激,您将在下面找到我的代码的输入和输出。
谢谢,
INPUT:
import requests
from bs4 import BeautifulSoup
page = requests.get("https://www.aisc.org/certification/certified-company?id=3220678")
print(page.status_code)
print(page.content)
soup = BeautifulSoup(page.content, 'lxml')
#print(soup.prettify())
#print(soup.find_all('ul', class_='vlist project-details-list'))
#print(soup.find_all('div', class_='unit size1of1'))
for header in soup.find_all('div', class_='unit size1of1'):
for company in header.find_all('h1'):
print(company.text)
for line in soup.find_all('ul', class_='vlist project-details-list'):
row = []
row+= line
print(row)
OUTPUT:
2-K Steel Products, Inc.
['\n', <li><strong>Address:</strong> 65 Murray Circle</li>, '\n', <li><strong>City:</strong> Ashville</li>, '\n', <li><strong>State:</strong> AL</li>, '\n', <li><strong>Zip Code:</strong> 35953</li>, '\n', <li><strong>Country:</strong> United States</li>, '\n', <li><strong>Contact:</strong> Mr. Kal Kimbrough </li>, '\n', <li><strong>Email Address:</strong> <a href="mailto:kkimbrough@2ksteel.com">kkimbrough@2ksteel.com</a></li>, '\n', <li><strong>Phone:</strong> (205) 594-5446</li>, '\n', <li><strong>Website:</strong> <a alt="2-K Steel Products, Inc." href="http://www.2ksteel.com" target="_blank">www.2ksteel.com</a></li>, '\n', <li><strong>Certification/Endorsement Types:</strong> BU</li>, '\n']
您询问的 for
循环有两个主要问题。
每次循环,重新初始化row
为[]
,空列表
您正在使用 +=
追加到列表,这并没有达到您的预期。
相反,您需要将初始化移动到循环之前,并使用 append()
:
row = []
for line in soup.find_all('ul', class_='vlist project-details-list'):
row.append(line)
当您将 +=
与左侧列表一起使用时,它期望右侧为 序列 。恰好字符串是一种序列,特别是字符。这就是您 运行 您的代码时所看到的:您 extend
使用序列中的值对列表进行排序。
我正在了解我的第一门编程语言,但我在尝试使用 BS4 和 Python 的练习时遇到了一些问题。
如果单击从列表中生成的任何 link,特定公司的 url 将变为: https://www.aisc.org/certification/certified-company?id=3220678
我想做的是抓取数据,它不是 table 形式,并将其转换为带有公司名称的 excel csv 文件,然后是关于公司的每一行其专栏中的信息(即地址、电话、电子邮件等)。我已经设法将公司名称和公司信息分开,但我无法将公司名称添加到列表中。我在解析公司信息中的标签时也遇到了问题。如果我使用 row+= line.text,那么输出是 row = ['a','d', 'd','r','e',.. .....]
任何帮助将不胜感激,您将在下面找到我的代码的输入和输出。
谢谢,
INPUT:
import requests
from bs4 import BeautifulSoup
page = requests.get("https://www.aisc.org/certification/certified-company?id=3220678")
print(page.status_code)
print(page.content)
soup = BeautifulSoup(page.content, 'lxml')
#print(soup.prettify())
#print(soup.find_all('ul', class_='vlist project-details-list'))
#print(soup.find_all('div', class_='unit size1of1'))
for header in soup.find_all('div', class_='unit size1of1'):
for company in header.find_all('h1'):
print(company.text)
for line in soup.find_all('ul', class_='vlist project-details-list'):
row = []
row+= line
print(row)
OUTPUT:
2-K Steel Products, Inc.
['\n', <li><strong>Address:</strong> 65 Murray Circle</li>, '\n', <li><strong>City:</strong> Ashville</li>, '\n', <li><strong>State:</strong> AL</li>, '\n', <li><strong>Zip Code:</strong> 35953</li>, '\n', <li><strong>Country:</strong> United States</li>, '\n', <li><strong>Contact:</strong> Mr. Kal Kimbrough </li>, '\n', <li><strong>Email Address:</strong> <a href="mailto:kkimbrough@2ksteel.com">kkimbrough@2ksteel.com</a></li>, '\n', <li><strong>Phone:</strong> (205) 594-5446</li>, '\n', <li><strong>Website:</strong> <a alt="2-K Steel Products, Inc." href="http://www.2ksteel.com" target="_blank">www.2ksteel.com</a></li>, '\n', <li><strong>Certification/Endorsement Types:</strong> BU</li>, '\n']
您询问的 for
循环有两个主要问题。
每次循环,重新初始化
row
为[]
,空列表您正在使用
+=
追加到列表,这并没有达到您的预期。
相反,您需要将初始化移动到循环之前,并使用 append()
:
row = []
for line in soup.find_all('ul', class_='vlist project-details-list'):
row.append(line)
当您将 +=
与左侧列表一起使用时,它期望右侧为 序列 。恰好字符串是一种序列,特别是字符。这就是您 运行 您的代码时所看到的:您 extend
使用序列中的值对列表进行排序。