试图通过使用soup.select和soup.find_all来提取URL
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试图通过使用soup.select和soup.find_all来提取URL相关的知识,希望对你有一定的参考价值。
这是网页html源代码的一部分:
<a href="http://www.abcde.com"> <img style="width:100%" src="/FileUploads/B/763846f.jpg" alt="search" title="search" /></a>
<a id="parts_img01" href="/Result?s=9&type=%E4&name=%E9"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>apple</h4></a>
<a id="parts_img02" href="/Result?s=12&type=%E4&name=%E4"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>banana</h4></a>
<a id="parts_img03" href="/Result?s=10&type=%E4&name=%E8"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>cherry</h4></a>
<a id="parts_img07" href="/Result?s=14&type=%E4&name=%E8"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>melon</h4></a>
我想提取我想要的网址,比如以/ Result开头的网址?我刚学会了你可以在美丽的汤中使用soup.find_all和soup.select。
soup.find_all:
icon = soup.find_all(id = re.compile("parts_img"))
其中一个结果将成功打印:
<a href="/Result?s=9&type=%E4&name=%E9" id="parts_img01"><h4 style=""><i aria-hidden="true" class="fa f-c"></i>apple</h4></a>
soup.select:
for item in soup.select(".fa f-c"):
print(item['href'])
这不起作用......
有可能我可以直接从HTML中提取网址吗?我只想打印:
/Result?s=9&type=%E4&name=%E9
/Result?s=12&type=%E4&name=%E4
/Result?s=10&type=%E4&name=%E8
/Result?s=14&type=%E4&name=%E8
答案
我认为这段代码将说明从给定的html中提取href
。
html = """<a href="http://www.abcde.com"> <img style="width:100%" src="/FileUploads/B/763846f.jpg" alt="search" title="search" /></a>
<a id="parts_img01" href="/Result?s=9&type=%E4&name=%E9"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>apple</h4></a>
<a id="parts_img02" href="/Result?s=12&type=%E4&name=%E4"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>banana</h4></a>
<a id="parts_img03" href="/Result?s=10&type=%E4&name=%E8"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>cherry</h4></a>
<a id="parts_img07" href="/Result?s=14&type=%E4&name=%E8"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>melon</h4></a>"""
from bs4 import BeautifulSoup as Soup
import re
from urllib.parse import urljoin
parser = Soup(html, "lxml")
href = [ urljoin("http://www.abcde.com", a["href"]) for a in parser.findAll("a", {"id" : re.compile('parts_img.*')})]
print(href)
另一答案
要在不使用正则表达式的情况下获得相同的输出:
html = """
<a href="http://www.abcde.com"> <img style="width:100%" src="/FileUploads/B/763846f.jpg" alt="search" title="search" /></a>
<a id="parts_img01" href="/Result?s=9&type=%E4&name=%E9"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>apple</h4></a>
<a id="parts_img02" href="/Result?s=12&type=%E4&name=%E4"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>banana</h4></a>
<a id="parts_img03" href="/Result?s=10&type=%E4&name=%E8"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>cherry</h4></a>
<a id="parts_img07" href="/Result?s=14&type=%E4&name=%E8"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>melon</h4></a>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "lxml")
for link in soup.select("[id^='parts_img']"):
print(link['href'])
结果:
/Result?s=9&type=%E4&name=%E9
/Result?s=12&type=%E4&name=%E4
/Result?s=10&type=%E4&name=%E8
/Result?s=14&type=%E4&name=%E8
另一答案
我正在使用
#!/usr/bin/python
import requests
from bs4 import BeautifulSoup
import re
top_url = 'https://a-certain.org/item-index'
response = requests.get(top_url)
html = response.content
soup = BeautifulSoup(html, 'html.parser')
items = soup.select('a[href^="http://a-certain.org/items"]')
for item in items:
print(items['href'])
输出是
http://a-certain.org/items/item1/
http://a-certain.org/items/item2/
http://a-certain.org/items/item3/
以上是关于试图通过使用soup.select和soup.find_all来提取URL的主要内容,如果未能解决你的问题,请参考以下文章
Python爬虫教程-25-数据提取-BeautifulSoup4
soup.find_all 有效,但 soup.select 无效
BeautifulSoup nth-of-type 返回空列表。 Soup.select()[n -1] 返回元素。为啥?