检查URL是否包含Python中列表中的所有元素

时间:2017-04-17 19:50:07

标签: python string

我正在开展一个项目,我希望生成一个列表,列出与给定关键字集和设定价格相匹配的所有易趣物品网址。到目前为止,我已经设法通过首先使用用户的输入关键字和价格创建EBay要求格式的URL,然后仅返回该页面中包含/ itm /的URL,因为这些将是项目URL 。但是,当关键字过于具体时,我遇到了问题。当Ebay针对特定搜索产生的结果少于10时,它还会为您提供一些指向“相关产品”的链接,这些链接可以匹配部分但不是全部的关键字。我不想返回这些相关产品的链接。我试图通过将输入用户关键字拆分为一个列表,然后放置一个If语句,其中URL必须包含此列表中的所有元素,但是这不起作用,并且我收到此错误消息:TypeError:'in'需要字符串作为左操作数,而不是bool。

请参阅下面的代码。任何帮助将不胜感激!

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'])

1 个答案:

答案 0 :(得分:0)

Python关键字all基本上是:列出(或类似的)逻辑值。因此,您必须先单独测试user_keyword中的每个单词,然后在最终结果中使用all

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

这段代码使用列表推导来生成列表(或者更确切地说是生成器,因为没有列表标记[])的布尔值,如果链接包含所有用户,则所有值都是True关键字。