【问题标题】:Having problems with a simple Instagram Scraper使用简单的 Instagram Scraper 时遇到问题
【发布时间】:2019-09-17 08:21:48
【问题描述】:

我对所有编程内容都很陌生,我正在为我的社会工程项目学习 Python。真的很抱歉,如果你会撞到自己的额头。

所以现在我正在看一个从某个 instagram 页面中抓取某些信息的教程。让我们说 f.e.我想从 www.instagram.com/nbamemes 提取信息

我在第 12 行“IndentationError: expected an indented block”中遇到问题。所以我已经用谷歌搜索了,但我只是没有得到代码。我需要放置自己的信息的占位符在哪里。

import requests
import urllib.request
import urllib.parse
import urllib.error
from bs4 import BeautifulSoup
import ssl
import json


class insta_Scraper_v1:

    def getinfo(self, url):
        html = urllib.request.urlopen('www.instagram.com/nbamemes', context=self.ctx).read()
        soup = BeautifulSoup(html, 'html.parser')
        data = soup.find_all('meta', attr={'property': 'og:description'})

        text = data[0]
        user = '%s %s %s' % (text[-3], text[-2], text[-1])
        followers = text[0]
        following = text[2]
        posts = text[4]
        print('User:', user)
        print('Followers:', followers)
        print('Following:', following)
        print('Posts:', posts)
        print('-----------------------')


    def mail(self):
        self.ctx = ssl.create_default_context()
        self.ctx.check_hostname = False
        self.ctx.verify_mode = ssl.CERT_NONE

        with open('123.txt') as f:
            self.content = f.readlines()
            self.content = [x.strip() for x in self.content]
        for url in self.content:
            self.getinfo(url)


if __name__ == '__main__'
    obj = insta_Scraper_v1()
    obj.mail()

我使用了一个教程来进行编程。但是,我没有完全正确。它对初学者并不完全友好,我似乎需要帮助。再次为这个超级初学者的问题感到抱歉。

问候,

等级

【问题讨论】:

标签: python beautifulsoup instagram screen-scraping urllib


【解决方案1】:

将来,分享您的代码生成的错误消息会很有用。它包括发生错误的行。

根据您提供的代码,我可以看到您没有在函数中缩进代码。在函数声明def之后,需要缩进里面的所有代码

所以来自:

def getinfo (self, url):
html = urllib.request.urlopen('www.instagram.com/nbamemes', context=self.ctx).read()
soup = BeautifulSoup(html, 'html.parser')
data = soup.find_all ('meta', attr={'property': 'og:description'})

收件人:

def getinfo (self, url):
    html = urllib.request.urlopen('www.instagram.com/nbamemes', context=self.ctx).read()
    soup = BeautifulSoup(html, 'html.parser')
    data = soup.find_all ('meta', attr={'property': 'og:description'})

【讨论】:

  • 感谢您的澄清。将来你会听到更多我的票。以后会提供错误日志!
【解决方案2】:

缩进是python中的块分隔符。下面是缩进的代码。每当您使用条件循环、def、类时,您都在创建一个块。为了定义您必须使用空格缩进代码。通常首选制表符空间,但即使是单个空间也可以正常工作。

import requests
import urllib.request
import urllib.parse
import urllib.error
from bs4 import BeautifulSoup
import ssl
import json

class insta_Scraper_v1:

    def getinfo (self, url):
        html = urllib.request.urlopen('www.instagram.com/nbamemes', context=self.ctx).read()
        soup = BeautifulSoup(html, 'html.parser')
        data = soup.find_all ('meta', attr={'property': 'og:description'})

        text = data[0]
        user = '%s %s %s' % (test[-3], text[-2], text[-1])
        followers = text[0]
        following = text[2]
        posts = text[4]
        print ('User:', user)
        print ( 'Followers:', followers)
        print ('Following:', following)
        print ('Posts:', posts)
        print ('-----------------------')

    def mail(self:
        self.ctx = ssl.create_default_context()
        self.ctx.check_hostname = False
        self.ctx.verify_mode = ssl.CERT_NONE

    with open('123.txt') as f: 
        self.content = f.readlines()
        self.content = [x.strip() for x in self.content]
        for url in self.content:
            self.getinfo(url)

if __name__ == '__main__'
obj = insta_Scraper_v1()
obj.main()

参考:Geeks For Geeks : Indentation

谢谢

【讨论】:

  • 非常感谢您的回复!澄清了我的失败:D!
猜你喜欢
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多