【问题标题】:Web scraping nested comments on Reddit using beautifulsoup使用 beautifulsoup 抓取 Reddit 上的嵌套评论
【发布时间】:2018-08-29 14:05:51
【问题描述】:

此代码获取页面。我的问题是我需要抓取用户 cmets 的内容而不是 cmets 的数量。它嵌套在 cmets 部分的数量内,但我不确定如何访问链接并解析和抓取用户 cmets。

request_list = []
id_list = [0]

for i in range(0,200,25): 
    response = requests.get("https://www.reddit.com/r/CryptoCurrency/?count="+str(i)+"&after="+str(id_list[-1]), headers = {'User-agent':'No Bot'})  
    soup = BeautifulSoup(response.content, 'lxml') 
    request_list.append(soup)
    id_list.append(soup.find_all('div', attrs={'data-type': 'link'})[-1]['data-fullname'])
    print(i, id_list)
    if i%100 == 0: 
        time.sleep(1)

下面的代码我尝试编写一个应该访问嵌套 cmets 的函数,但我不知道。

def extract_comment_contents(request_list):    
    comment_contents_list = []   
    for i in request_list:
        if response.status_code == 200: 
            for each in i.find_all('a', attrs={'data-inbound-url': '/r/CryptoCurrency/comments/'}): 
                comment_contents_list.append(each.text)
        else:
            print("Call failed at request ", i)           
    return comment_contents_list



fetch_comment_contents_list = extract_comment_contents(request_list)

print(fetch_comment_contents_list)

【问题讨论】:

  • Reddit 有一个定义良好的 API,并确保你想做的任何事情都在那里可用。您应该改用 API - 它在他们的服务器上会更好,并且对您来说比网络抓取更容易。使用 Python 变得更加容易,因为您可以使用 PRAW

标签: python python-3.x web-scraping beautifulsoup reddit


【解决方案1】:

对于每个线程,您需要发送另一个请求以获取 cmets 页面。 cmets 页面的 url 可以使用soup.find_all('a', class_='bylink comments may-blank') 找到。这将提供所有必须指向 cmets 页面的 a 标记。我将向您展示一个访问 cmets 页面的示例。

r = requests.get('https://www.reddit.com/r/CryptoCurrency/?count=0&after=0')
soup = BeautifulSoup(r.text, 'lxml')

for comments_tag in soup.find_all('a', class_='bylink comments may-blank', href=True):
    url = comments_tag['href']
    r2 = requests.get(url)
    soup = BeautifulSoup(r2.text, 'lxml')
    # Your job is to parse this soup object and get all the comments.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2019-04-10
    • 2019-09-06
    • 2022-08-18
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多