使用 beautifulsoup 删除网页的某些部分
Remove certain parts of web page using beautifulsoup
我正在尝试从页面读取链接,但我得到的链接比预期的要多。
我正在做的是:
http = httplib2.Http()
status, page= http.request('page address')
soup = BeautifulSoup(page,'html.parser', parse_only=SoupStrainer('a'))
For link in soup:
if link.has_attr('href'):
print(link['href'])
我检查了页面并注意到它有两个主要组成部分:
<div id="main">
<aside id="secondary">
我不想要的链接来自内部 <aside id="secondary">
。仅从 <div id="main">
获取链接的最简单方法是什么?
谢谢
到 select <a>
下的链接 <div id="main">
您可以使用 CSS select 或:
for a in soup.select('div#main a'):
print(a)
仅对于具有 href=
属性的链接:
for a in soup.select('div#main a[href]'):
print(a['href'])
我建议使用 beautifulsoup 的 find_all
运算符:
my_links = soup.find_all("a", {"id":"main", "href":True})
my_links = [x["href"] for x in my_links]
假设您的网页包含父链接 div
,您可以执行以下操作:
my_divs = soup.find_all("div", {"id":"main"})
my_links = [x.find_all("a", {"href":True}, recursive=False) for x in my_divs]
# flatten
my_links = [x for y in my_links for x in y]
# extract hrefs
my_links = [x["href"] for x in my_links]
我正在尝试从页面读取链接,但我得到的链接比预期的要多。 我正在做的是:
http = httplib2.Http()
status, page= http.request('page address')
soup = BeautifulSoup(page,'html.parser', parse_only=SoupStrainer('a'))
For link in soup:
if link.has_attr('href'):
print(link['href'])
我检查了页面并注意到它有两个主要组成部分:
<div id="main">
<aside id="secondary">
我不想要的链接来自内部 <aside id="secondary">
。仅从 <div id="main">
获取链接的最简单方法是什么?
谢谢
到 select <a>
下的链接 <div id="main">
您可以使用 CSS select 或:
for a in soup.select('div#main a'):
print(a)
仅对于具有 href=
属性的链接:
for a in soup.select('div#main a[href]'):
print(a['href'])
我建议使用 beautifulsoup 的 find_all
运算符:
my_links = soup.find_all("a", {"id":"main", "href":True})
my_links = [x["href"] for x in my_links]
假设您的网页包含父链接 div
,您可以执行以下操作:
my_divs = soup.find_all("div", {"id":"main"})
my_links = [x.find_all("a", {"href":True}, recursive=False) for x in my_divs]
# flatten
my_links = [x for y in my_links for x in y]
# extract hrefs
my_links = [x["href"] for x in my_links]