我正在制作一个网络蜘蛛来自动完成我的一些工作。 我有一个包含许多驱动程序和不同版本的表用于不同的操作系统。 到目前为止一切正常,但我很难分离每个操作系统的链接。 我会在这里发布部分HTML,但我无法发布整个页面。 问题是我不知道我能抓住每个链接和它旁边的文本,我可以抓住所有这些但我不知道什么链接,如果是什么操作系统。
这是表格中一个单元格的内容,我只需要获得与OS版本相关的链接(win8.1,win10,win7)
<p class="MsoNormal" style="mso-line-height-alt:9.3pt"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">SfP/StP
<a href="LINK_TO_FILE">AHWFW0609P_WinB</a>.zip
</span><span class="MsoHyperlink"><b><sup><span style="font-size:11.0pt;
font-family:"Calibri",sans-serif;color:#984806;background:white;text-decoration:
none;text-underline:none">Win8.1</span></sup></b></span><span style="font-size:11.0pt;font-family:"Calibri",sans-serif"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-line-height-alt:9.3pt"><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D">SfP/StP
<a href="LINK_TO_FILE">AHWFW0553P_WinT</a></span><span style="color:#1F497D">.</span><span style="font-size:11.0pt;font-family:
"Calibri",sans-serif;color:#1F497D">zip</span><span class="MsoHyperlink"><b><sup><span style="font-size:11.0pt;font-family:"Calibri",sans-serif;color:#984806;
background:white;text-decoration:none;text-underline:none"> Win10</span></sup></b></span><span class="MsoHyperlink"><b><sup><span style="color:#984806;background:white;
text-decoration:none;text-underline:none"><o:p></o:p></span></sup></b></span></p>
这是我用来获取名称和链接的代码。
file = open(r"Path to HTML file", 'rb')
drivers = {}
rng_lst = [str(x) for x in range(5, 43)]
soup = bs4.BeautifulSoup(file)
table = soup.findAll('table')[0]
for row in table.findAll('tr'):
cells = row.findAll('td')
if len(cells) > 4:
cell_num = cells[1].get_text(strip=True)
if any(cell_num == n for n in rng_lst):
drv_name = cells[2].get_text(strip=True)
drivers[drv_name] = {'links': []}
links = cells[4].findAll('a')
for link in links:
drivers[drv_name]['links'].append(link.get('href'))
答案 0 :(得分:1)
假设string
包含html内容
from bs4 import BeautifulSoup
soup = BeautifulSoup(string)
for pTag in soup.find_all('p'):
anchorTag = pTag.findNext('a')
linkText = pTag.find('span', {'class' : 'MsoHyperlink' } ).span.text
print "LpTag.findNext('a')ink : ", anchorTag["href"]
print "Text to Link ", linkText
print
会给你一个输出
Link : LINK_TO_FILE
Text to Link Win8.1
Link : LINK_TO_FILE
Text to Link Win10
它的作用是什么?
通过查看输入字符串,我们可以知道我们感兴趣的锚点和文本存在于p
标记内。
该文本位于span
标记内,该标记位于另一个span
标记下,该标记位于锚标记旁边。
答案 1 :(得分:0)
os_cell = cells[4]
os_span = os_cell.find("span", class_="MsoHyperlink")
os = os_span.string