BeautifulSoup / Python网站解析问题

问题描述

我敢肯定,过去可能有人问过这个问题,但是我正在尝试解析一个网站(希望能以某种方式自动将其解析为最终一次解析多个网站),但是它无法正常工作。我在获取适当的标签或某些东西时可能会遇到问题,但是从本质上讲,我想访问此网站并从创建的列表中提取所有项目(可能带有完整的hrefs或在单独的文档中)并将它们粘贴到文件中,我可以以易于阅读的格式共享。到目前为止,这是我的代码

<CONTAINER_DESCRIPTION>
  <LINE_CO>005</LINE_CO>
  <DESCRIPTION>red,green</DESCRIPTION>
</CONTAINER_DESCRIPTION>
<CONTAINER_DESCRIPTION>
  <LINE_CO>006</LINE_CO>
  <DESCRIPTION>blue

我什至试图为一个表写这个,但是我得到了相同类型的输出,它们是一堆空元素:

<CONTAINER_DESCRIPTION>
  <LINE_CO>005</LINE_CO>
  <DESCRIPTION>red,green</DESCRIPTION>
</CONTAINER_DESCRIPTION>
<CONTAINER_DESCRIPTION>
  <LINE_CO>006</LINE_CO>
  <DESCRIPTION>blue</DESCRIPTION>
</CONTAINER_DESCRIPTION>

有人对为什么会这样有任何见解吗?如果可能的话,我也不会反对进行正则表达式解析,但是这里的主要目标是进入这个站点(并希望其他人也喜欢它)并获取每个专业的单个程序的整个表/列表/说明并编写信息。变成易于阅读的文件

解决方法

相似的方法,我也选择将bs4与pandas组合在一起,但是我测试了超链接类的存在。

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

url = 'http://catalog.apu.edu/academics/college-liberal-arts-sciences/math-physics-statistics/applied-mathematics-bs/'
r = requests.get(url)
soup = bs(r.content,'lxml')

for table in soup.select('.sc_courselist'):
    tbl = pd.read_html(str(table))[0]
    links_column = ['http://catalog.apu.edu' + i.select_one('.bubblelink')['href'] if i.select_one('.bubblelink') is not None else '' for i in table.select('td:nth-of-type(1)')]
    tbl['Links'] = links_column
    print(tbl)

对于BeautifulSoupfind/find_all可以替代select_one/select。后两个应用css selectors,其中select_one返回传入的CSS选择器的第一个匹配项,而select返回所有匹配项的列表。 “。”是一个类选择器,这意味着它将选择具有指定类的属性,例如sc_courselistbubblelinkbubblelink是具有所需hrefs的元素的类。这些位于使用td:nth-of-type(1)选择的每个表的第一列中。