2017-10-13 2 views
1

をsoup.find_allしようとしました:はsoup.selectを使用してURLを抽出し、これは、Webページの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&amp;type=%E4&amp;name=%E9"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>apple</h4></a> 
<a id="parts_img02" href="/Result?s=12&amp;type=%E4&amp;name=%E4"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>banana</h4></a> 
<a id="parts_img03" href="/Result?s=10&amp;type=%E4&amp;name=%E8"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>cherry</h4></a> 
<a id="parts_img07" href="/Result?s=14&amp;type=%E4&amp;name=%E8"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>melon</h4></a> 

そして、私は1つのように、私が欲しいのURLを抽出したいです/ Resultで始まる? 私はあなたが美味しいスープでスープ.find_allとスープ。セレクトを使用できることを学んだ。

soup.find_all:

icon = soup.find_all(id = re.compile("parts_img")) 

と結果の一

が正常に印刷されます:

<a href="/Result?s=9&amp;type=%E4&amp;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からURLを直接抽出することができますか? は、私はちょうど印刷したい:

/Result?s=9&amp;type=%E4&amp;name=%E9 
/Result?s=12&amp;type=%E4&amp;name=%E4 
/Result?s=10&amp;type=%E4&amp;name=%E8 
/Result?s=14&amp;type=%E4&amp;name=%E8 

答えて

1

私はこのコードが指定された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&amp;type=%E4&amp;name=%E9"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>apple</h4></a> 
<a id="parts_img02" href="/Result?s=12&amp;type=%E4&amp;name=%E4"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>banana</h4></a> 
<a id="parts_img03" href="/Result?s=10&amp;type=%E4&amp;name=%E8"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>cherry</h4></a> 
<a id="parts_img07" href="/Result?s=14&amp;type=%E4&amp;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) 
+0

これは機能しています!ありがとうございました!私は別の質問があります、この場合、URLは完全ではありません。私はすべてのURLをwww.abcde.comに登録する必要がありますが、hrefはリストなので、次のようなエラーが発生します:strとnon-strの引数を混在させることはできません。私は途中でurljoinを使用します。 – Makiyo

+0

urllib.parseライブラリを使用して、元のアンサーで絶対URLに相対URLを結合してください – djinn

2

正規表現を使用せずに、同じ出力を得るために:

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&amp;type=%E4&amp;name=%E9"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>apple</h4></a> 
<a id="parts_img02" href="/Result?s=12&amp;type=%E4&amp;name=%E4"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>banana</h4></a> 
<a id="parts_img03" href="/Result?s=10&amp;type=%E4&amp;name=%E8"><h4 style=""><i class="fa f-c" aria-hidden="true"></i>cherry</h4></a> 
<a id="parts_img07" href="/Result?s=14&amp;type=%E4&amp;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 
0

私は出力が

です

#!/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/ 
関連する問題