2017-04-17 117 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如果链接包含所有用户关键字。

相关问题