2017-04-30 5 views
1

私はパイソンでスクレーパーを作った。スムーズに走っています。今、私はそのページからの特定のリンクを破棄したり受け入れたりしたいと思います。リンクは「携帯」のみを含んでいますが、条件文を作成してもそれを行うことはできません。私の間違いを是正する助けを得ることを願っています。条件文を使ってウェブページから特定のアイテムを選ぶ方法

import requests 
from bs4 import BeautifulSoup 
def SpecificItem(): 
    url = 'https://www.flipkart.com/' 
    Process = requests.get(url) 
    soup = BeautifulSoup(Process.text, "lxml") 
    for link in soup.findAll('div',class_='')[0].findAll('a'): 
     if "mobiles" not in link: 
      print(link.get('href')) 
SpecificItem() 

一方、xpathでlxmlライブラリを使用して同じことを行うと、動作します。

import requests 
from lxml import html 
def SpecificItem(): 
    url = 'https://www.flipkart.com/' 
    Process = requests.get(url) 
    tree = html.fromstring(Process.text) 
    links = tree.xpath('//div[@class=""]//a/@href') 
    for link in links: 
     if "mobiles" not in link: 
      print(link) 

SpecificItem() 

だから、この時点では、私はBeautifulSoupライブラリではコードが目的を達成するために多少異なるはずだと思います。

+0

条件文を削除してすべてを印刷します。あなたは何を見ますか? –

+0

お返事ありがとうございました。私は条件文を削除すると、私はそのページで利用可能なすべてのリンクを見ることができます。実際、if文とif文を使用しないと、結果に変更は見られません。 – SIM

答えて

0

あなたの問題の根本は、ifの状態がBeautifulSoupとlxmlの間で少し違っているということです。基本的にif "mobiles" not in link:とBeautifulSoupは"mobiles"hrefフィールドにあるかどうかをチェックしていません。私はあまりにも難しく見えませんでしたが、私はそれをlink.textフィールドと比較していると思います。

import requests 
from bs4 import BeautifulSoup 
def SpecificItem(): 
    url = 'https://www.flipkart.com/' 
    Process = requests.get(url) 
    soup = BeautifulSoup(Process.text, "lxml") 
    for link in soup.findAll('div',class_='')[0].findAll('a'): 
     href = link.get('href') 
     if "mobiles" not in href: 
      print(href) 
SpecificItem() 

リンクし、それらのどれも「携帯電話」が含まれるの束を出力します:明示的hrefフィールドを使用すると、トリックを行います。

+0

あなたの答えは、supersam654に感謝します。私はあなたがここで説明した方法を正確に考えていましたが、以前の印刷オプションの "href"コマンドを設定することはできませんでした。もう一度感謝し、問題を解決します。 – SIM

関連する問題