2017-04-17 65 views
0

我正在製作一個項目,我想要生成一個與給定的一組關鍵字和設置價格匹配的所有Ebay項目URL的列表。到目前爲止,我已經設法通過首先使用用戶的輸入關鍵字和價格以eBay要求的格式創建URL,然後僅返回來自該頁面的包含/ itm /的URL,因爲這些將是項目URL 。但是,當關鍵字過於具體時,我遇到了問題。當Ebay針對特定搜索出現少於10條結果時,它還會爲您提供一些與「相關產品」相關的鏈接,可與某些關鍵字但不是全部相匹配。我不想返回這些相關產品的鏈接。我試圖通過將輸入用戶關鍵字分割成一個列表,然後放置一個If語句,其中的URL必須包含此列表中的所有元素,但沒有起作用,並且我收到此錯誤消息:TypeError:'in'需要字符串作爲左操作數,而不是bool。檢查一個URL是否包含Python中列表中的所有元素

看到我的代碼如下。任何幫助,將不勝感激!

import requests 
from bs4 import BeautifulSoup 
import cherrypy 

user_keyword = input("What would you like to search for? ") 

print(user_keyword) 


keywords_url = user_keyword.replace(' ', '%20') 


user_price = input("What is your maximum price? ") 

url_part1 = 'http://www.ebay.com/sch/i.html?_from=R40&_sacat=0&_nkw=' 
url_part2 = '&_dcat=55793&rt=nc&_mPrRngCbx=1&_udlo&_udhi=' 

url = (url_part1 + keywords_url + url_part2 + user_price) 


r= requests.get(url) 

data = r.text 

soup = BeautifulSoup(data, "html.parser") 

for link in soup.find_all('a'): 
    if link.has_attr('href'): 
     if '/itm/' in link['href']: #Makes sure we only get actual item links 
      if all(user_keyword.split(' ')) in link['href']: 
       print(link['href']) 

回答

0

Python的關鍵字all基本上是和:荷蘭國際集團的列表(或類似的)邏輯值。因此,你必須首先在user_keyword測試單個單詞,然後對最終結果使用all

if all(word in link['href'] for word in user_keyword.split(' ')):

這段代碼使用列表解析生成一個列表(或者更確切地說,發電機,因爲有沒有列表標記[])的布爾值,其中所有值爲True如果鏈接包含所有用戶關鍵字。

相關問題