我知道我的代码正在查找所有包含重复项的URL,所以我想知道如何删除其中的1个或只找到1.有人可以告诉我这里我做错了什么吗?谢谢。
import requests, datetime
from apscheduler.schedulers.blocking import BlockingScheduler
#This function pulls arcade listings from Los Angeles and Orange County craigslist and parses keywords.
def arcade_search():
now = datetime.datetime.now()
url1 = 'https://orangecounty.craigslist.org/search/sss?query=arcade&sort=rel'
url2 = 'https://losangeles.craigslist.org/search/sss?query=arcade&sort=rel'
r1 = requests.get(url1)
r2 = requests.get(url2)
print(r1.status_code, r2.status_code)
from bs4 import BeautifulSoup
data1 = r1.text
data2 = r2.text
#print(data1)
soup = BeautifulSoup(data1 + data2, 'html.parser')
for link in soup.findAll('a'):
listing1 = link.get('href')
if 'millipede' in listing1.lower():
print('millipede was found! ' + listing1)
arcade_search()
答案 0 :(得分:0)
一般来说,如果您想搜索某些内容并且只查找唯一值,则需要维护已找到的值列表。例如:
now = datetime.datetime.now()
url1 = 'https://orangecounty.craigslist.org/search/sss?query=arcade&sort=rel'
url2 = 'https://losangeles.craigslist.org/search/sss?query=arcade&sort=rel'
r1 = requests.get(url1)
r2 = requests.get(url2)
found = []
print(r1.status_code, r2.status_code)
from bs4 import BeautifulSoup
data1 = r1.text
data2 = r2.text
#print(data1)
soup = BeautifulSoup(data1 + data2, 'html.parser')
for link in soup.findAll('a'):
listing1 = link.get('href')
if 'millipede' in listing1.lower() and listin1 not in found:
print('millipede was found! ' + listing1)
found.append(listing1)
arcade_search()
然而,在这种特殊情况下,可能还有更多工作要做。我猜你是在两个不同的get请求中找到重复的链接,而不是在任何一个中。这就是来自get(url1)
的回复中的链接都是唯一的,并且来自get(url2)
的响应中的链接相同,但您发现get(url1)
中返回的某些链接显示在get(url2)
,反之亦然,因为奥兰治县和洛杉矶地区没有脱节。此外,似乎Craigslist返回相对于您正在搜索的区域的链接,例如https://orangecounty.craigslist.org/vgm/d/restored-arcade-game-with-800/6495065079.html
VS
https://losangeles.craigslist.org/wst/sgd/d/namco-upright-classic-arcade/6511455107.html
因此,当您说urls
重复时,您的确意味着两个不同的网址指向同一页面。假设这实际上是您遇到的情况,我提供的上述代码无法解决您的问题,因为它只能检测您找到的网址是否相同。您可以尝试仅跟踪d/
之后的跟踪或部分,或者仅仅是描述性字符串部分(我的意思是例如&nbspco-upright-classic-arcade')但我可以' t保证这些对于跨搜索区域的相同列表是相同的,或者对于跨区域的不同列表是不同的。