使用BeautifulSoup4的Python-Reddit web爬虫程序不返回任何内容

使用BeautifulSoup4的Python-Reddit web爬虫程序不返回任何内容,python,for-loop,beautifulsoup,web-crawler,reddit,Python,For Loop,Beautifulsoup,Web Crawler,Reddit,我试图为Reddit的/r/all创建一个网络爬虫,它可以收集顶级帖子的链接。我一直在关注YouTube上的第一部分 在我的代码中,我删除了while循环,该循环对newboston的情况下要爬网的页面数设置了限制(我只会爬网/r/all的前25个帖子,只有一个页面)。当然,我已经做了这些改变,以适应我的网络爬虫的目的 在我的代码中,我将URL变量更改为“”(出于明显的原因),将Soup.findAlliterable更改为Soup.findAll('a',{'class':'title may

我试图为Reddit的/r/all创建一个网络爬虫,它可以收集顶级帖子的链接。我一直在关注YouTube上的第一部分

在我的代码中,我删除了while循环,该循环对newboston的情况下要爬网的页面数设置了限制(我只会爬网/r/all的前25个帖子,只有一个页面)。当然,我已经做了这些改变,以适应我的网络爬虫的目的

在我的代码中,我将
URL
变量更改为“”(出于明显的原因),将
Soup.findAll
iterable更改为
Soup.findAll('a',{'class':'title may blank loggedin')
是Reddit上帖子的标题类)

这是我的密码:

import requests
from bs4 import BeautifulSoup

def redditSpider():
    URL = 'http://www.reddit.com/r/all/'
    sourceCode = requests.get(URL)
    plainText = sourceCode.text
    Soup = BeautifulSoup(plainText)
    for link in Soup.findAll('a', {'class': 'title may-blank loggedin'}):
        href = 'http://www.reddit.com/r/all/' + link.get('href')
        print(href)

redditSpider()
我在每行之间使用
print
语句做了一些业余的bug检查,似乎for循环没有被执行

要跟随或比较Newboston的代码与我的代码,请跳到他的迷你系列的第二部分,并在他的视频中找到显示代码的位置

编辑:根据请求编辑NewBoston的代码:

import requests
from bs4 import BeautifulSoup

def trade_spider(max_pages):
    page = 1
    while page <= max_pages:
        url = 'https://buckysroom.org/trade/search.php?page=' + str(page)
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text)
        for link in Soup.findAll('a', {'class': 'item-name'}):
            href = 'http://buckysroom.org' + link.get('href')
            print(href)
        page += 1

trade_spider()
导入请求
从bs4导入BeautifulSoup
def trade_spider(最大页数):
页码=1

虽然page这并不是对您的问题的直接回答,但我想让您知道,有一个为Python制作的Reddit API,名为PRAW(Python Reddit API包装器),您可能希望查看它,因为它可以更轻松地完成您希望完成的任务


链接:

这并不是对您问题的直接回答,但我想让您知道,有一个为Python制作的Reddit API,名为PRAW(Python Reddit API包装器),您可能想查看它,因为它可以更轻松地完成您希望完成的任务


链接:

因此,首先,纽伯顿似乎是一个屏幕广播,因此在那里输入代码会很有帮助

其次,我建议您将文件输出到本地,这样您就可以在浏览器中打开它,并在Web工具中查看您想要的内容。我还建议使用ipython在本地对文件中的BeautfulSoup进行处理,而不是每次都将其删除

如果你把这个放进去,你可以做到:

plainText = sourceCode.text
f = open('something.html', 'w')
f.write(sourceCode.text.encode('utf8'))
当我运行您的代码时,首先我必须等待,因为有几次它返回了一个错误页面,我经常请求它。这可能是你的第一个问题

当我得到这个页面时,有很多链接,但是没有你的类。我不确定在不看整个Youtube系列的情况下,“标题可能是空白的loggedin”应该代表什么

现在我看到问题了

这是登录类,您没有使用刮板登录

您不需要登录就可以看到/r/all,只需使用以下选项:

soup.findAll('a', {'class': 'title may-blank '})

因此,首先,纽伯斯顿似乎是一个屏幕放映,所以在那里得到的代码将是有益的

其次,我建议您将文件输出到本地,这样您就可以在浏览器中打开它,并在Web工具中查看您想要的内容。我还建议使用ipython在本地对文件中的BeautfulSoup进行处理,而不是每次都将其删除

如果你把这个放进去,你可以做到:

plainText = sourceCode.text
f = open('something.html', 'w')
f.write(sourceCode.text.encode('utf8'))
当我运行您的代码时,首先我必须等待,因为有几次它返回了一个错误页面,我经常请求它。这可能是你的第一个问题

当我得到这个页面时,有很多链接,但是没有你的类。我不确定在不看整个Youtube系列的情况下,“标题可能是空白的loggedin”应该代表什么

现在我看到问题了

这是登录类,您没有使用刮板登录

您不需要登录就可以看到/r/all,只需使用以下选项:

soup.findAll('a', {'class': 'title may-blank '})
您没有“登录”,因此永远不会应用类样式。这在没有登录的情况下工作:

import requests
from bs4 import BeautifulSoup

def redditSpider():
    URL = 'http://www.reddit.com/r/all'
    source = requests.get(URL)
    Soup = BeautifulSoup(source.text)
    for link in Soup.findAll('a',attrs={'class' : 'title may-blank '}):
        href = 'http://www.reddit.com/r/all/' + link.get('href')
        print(href)

redditSpider()
您没有“登录”,因此永远不会应用类样式。这在没有登录的情况下工作:

import requests
from bs4 import BeautifulSoup

def redditSpider():
    URL = 'http://www.reddit.com/r/all'
    source = requests.get(URL)
    Soup = BeautifulSoup(source.text)
    for link in Soup.findAll('a',attrs={'class' : 'title may-blank '}):
        href = 'http://www.reddit.com/r/all/' + link.get('href')
        print(href)

redditSpider()

你能告诉我一个关于如何用我的刮板登录reddit的来源吗?我更新了答案,包括了我修改的代码,修复了它。但是,我收到的错误消息太多,请求太多,您需要处理这些请求。因此,虽然我认为我的修复程序可以解决您当前的问题,但稻草人的建议是,如果您更关心如何刮除Reddit,而不是学习web刮除程序,那么您会更好。您能告诉我一个来源,指导我如何使用我的刮除器登录Reddit吗?我更新了答案,以包括我对其进行的代码更改。但是,我收到的错误消息太多,请求太多,您需要处理这些请求。所以,虽然我认为我的解决方案将解决您当前的问题,但稻草人的建议是,如果您更关心如何刮取Reddit,而不是学习如何使用web刮取器,则会更好。