如何使用BeautifulSoup删除重复的URL?

时间:2018-02-27 03:00:34

标签: python-3.x

我知道我的代码正在查找所有包含重复项的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()

1 个答案:

答案 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保证这些对于跨搜索区域的相同列表是相同的,或者对于跨区域的不同列表是不同的。