Beautifulsoup,使用 link 抓取文本
Beautifulsoup, grab text with link
我正在制作一个网络蜘蛛来自动化我的一些工作。
我有一个 table 有很多驱动程序和不同操作系统的不同版本。
到目前为止一切正常,但我很难为每个操作系统分离 links。
我将 post 部分 html 放在这里,但我不能 post 整个页面。
问题是我不知道我能否抓取每个 link 及其旁边的文本,我可以抓取所有这些但我不知道 link 是什么操作系统.
这是table中一个单元格的内容,我只需要得到link和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>
这是我用来获取名称和 links 的代码。
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'))
假设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
标签下。
os_cell = cells[4]
os_span = os_cell.find("span", class_="MsoHyperlink")
os = os_span.string
我正在制作一个网络蜘蛛来自动化我的一些工作。 我有一个 table 有很多驱动程序和不同操作系统的不同版本。 到目前为止一切正常,但我很难为每个操作系统分离 links。 我将 post 部分 html 放在这里,但我不能 post 整个页面。 问题是我不知道我能否抓取每个 link 及其旁边的文本,我可以抓取所有这些但我不知道 link 是什么操作系统.
这是table中一个单元格的内容,我只需要得到link和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>
这是我用来获取名称和 links 的代码。
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'))
假设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
标签下。
os_cell = cells[4]
os_span = os_cell.find("span", class_="MsoHyperlink")
os = os_span.string