【问题标题】:Script that scrapes website infinitely without scraping duplicates doesn't work无限抓取网站而不抓取重复项的脚本不起作用
【发布时间】:2020-09-27 17:00:36
【问题描述】:

我写了一个简单的脚本,虽然它在抓取网站时有效,但在尝试使其不抓取重复项时,它不起作用。我认为使它不刮重复的逻辑是:

  1. 将所有链接添加到列表中
  2. 获取新链接并与第一个列表进行比较
  3. 如果第二个列表中的新链接不在第一个列表中,则修改到第一个列表?
import requests
import time
from bs4 import BeautifulSoup
import sys

f = open("links.txt", "a")
list_=[]

while True:
    try:
        URL = f'WEBSITEURL.COM'
        page = requests.get(URL)
        time.sleep(1)

        soup = BeautifulSoup(page.text, 'html.parser')

        data = soup.findAll('div',attrs={'class':'card-content'})
        for div in data:
            links = div.findAll('a')
            for a in links:
                if a not in list_:
                    f.write(a['href'])
                    f.write('\n')
                    print (a['href'])
                elif:
                    continue
    except Exception as e:
        print('something went wrong')
        #continue

【问题讨论】:

  • 你能详细说明“它不起作用”吗?
  • 这就是问题所在。它只是触发了我的 print('something went wrong') 错误,但是从理论上看它应该可以工作的代码?我用制作时的逻辑更新了我的帖子
  • 引发或打印捕获的异常,这样您就可以真正看到导致它崩溃的原因。
  • 尝试打印异常信息,看看有什么问题:print('something went wrong', str(e))
  • 注意:您永远不会添加到您的列表中,如果您想防止重复,请使用集合

标签: python web web-scraping


【解决方案1】:

在 Python 中,set 是用于维护非重复记录的最佳内置数据结构。在您的情况下,首先使用所有链接更新集合,然后将链接写入文件。

import requests
import time
from bs4 import BeautifulSoup
import sys

list_=set()
while True:
    try:
        URL = f'WEBSITEURL.COM'
        page = requests.get(URL)
        time.sleep(1)
        soup = BeautifulSoup(page.text, 'html.parser')
        data = soup.findAll('div',attrs={'class':'card-content'})
        for div in data:
            links = div.findAll('a')
            list_.update(links)
    except Exception as e:
        print('something went wrong')
        #continue
with open("links.txt", "w") as f:
    f.write("\n".join(list_))

如果您仍然收到something went wrong 错误,那么它一定与链接无关,它在您的抓取代码中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2022-01-16
    • 2021-01-21
    相关资源
    最近更新 更多