首页 > 解决方案 > Nonetype 对象没有属性“用户”

问题描述

    global twitter_user_info
    twitter_user_info=[]    

    def get_user_info(twitter_user):
    """
    An example of using the query_user_info method
    :param twitter_user: the twitter user to capture user data
    :return: twitter_user_data: returns a dictionary of twitter user data
    """

    user_info = query_user_info(user=twitter_user)
    twitter_user_data = {}

    twitter_user_data["user"] = user_info.user
    twitter_user_data["fullname"] = user_info.full_name
    twitter_user_data["location"] = user_info.location
    twitter_user_data["blog"] = user_info.blog
    twitter_user_data["date_joined"] = user_info.date_joined
    twitter_user_data["id"] = user_info.id
    twitter_user_data["num_tweets"] = user_info.tweets
    twitter_user_data["following"] = user_info.following
    twitter_user_data["followers"] = user_info.followers
    twitter_user_data["likes"] = user_info.likes
    twitter_user_data["lists"] = user_info.lists

    return twitter_user_data

    absd=[]
    def main():
      start = time.time()
      csv = pd.read_csv('operationbandar_users.csv')
      users = csv['username']
      pool = Pool(4)

      for user in pool.map(get_user_info,users):
        twitter_user_info.append(user)

      cols=['id','fullname','date_joined','location','blog', 'num_tweets','following','followers','likes','lists']
      data_frame = pd.DataFrame(twitter_user_info, index=absd, columns=cols)
      data_frame.index.name = "Users"
      data_frame.sort_values(by="followers", ascending=False, inplace=True, kind='quicksort', na_position='last')
      elapsed = time.time() - start
      print(f"Elapsed time: {elapsed}")
      display(data_frame)    

此代码返回以下错误:

multiprocessing.pool.RemoteTraceback: """ Traceback (最近一次调用最后一次): 文件 "/home/nrjkumar/anaconda3/envs/Scraping/lib/python3.7/multiprocessing/pool.py", 第 121 行, in worker result = (真,func(*args, *kwds))文件“/home/nrjkumar/anaconda3/envs/Scraping/lib/python3.7/multiprocessing/pool.py”,第 44 行,在 mapstar 返回列表中(map(*args )) 文件“examples/get_twitter_user_data_1.py”,第 43 行,在 get_user_info
twitter_user_data["user"] = user_info.user
AttributeError: 'NoneType' object has no attribute 'user' """
上述异常是导致以下异常:
回溯(最后一次调用):文件“examples/get_twitter_user_data_1.py”,第 89 行,在 main() 文件“examples/get_twitter_user_data_1.py”,第 66 行,主要用于 pool.map(get_user_info,users) 中的用户:文件“/home/nrjkumar/anaconda3/envs/Scraping/lib/python3.7/multiprocessing/pool.py”,第 268 行,在地图中返回 self._map_async(func, iterable, mapstar, chunksize).get() 文件“ /home/nrjkumar/anaconda3/envs/Scraping/lib/python3.7/multiprocessing/pool.py",第 657 行,在 get raise self._value
AttributeError: 'NoneType' object has no attribute 'user'

我在这里搜索了使用 pool.map 并将字典作为参数传递的可能情况,但找不到问题。我是python的新手。有人可以帮忙吗?

查询用户信息()

def query_user_info(user):
"""
Returns the scraped user data from a twitter user page.

:param user: the twitter user to web scrape its twitter page info
"""
try:
    user_info = query_user_page(INIT_URL_USER.format(u=user))
    if user_info:
        logger.info("Got user information from username {}".format(user))
        return user_info

except KeyboardInterrupt:
    logger.info("Program interrupted by user. Returning user information gathered so far...")
except BaseException:
    logger.exception("An unknown error occurred! Returning user information gathered so far...")

logger.info("Got user information from username {}".format(user))
return user_info                      

查询用户页面()

def query_user_page(url, retry=10, timeout=60):
"""
Returns the scraped user data from a twitter user page.

:param url: The URL to get the twitter user info from (url contains the user page)
:param retry: Number of retries if something goes wrong.
:return: Returns the scraped user data from a twitter user page.
"""
print("reached url:",url)

try:
    proxy = next(proxy_pool)
    logger.info('Using proxy {}'.format(proxy))
    response = requests.get(url, headers=HEADER, proxies={"http": proxy})
    html = response.text or ''

    user_info = User.from_html(html)
    if not user_info:
        return None

    return user_info

except requests.exceptions.HTTPError as e:
    logger.exception('HTTPError {} while requesting "{}"'.format(
        e, url))
except requests.exceptions.ConnectionError as e:
    logger.exception('ConnectionError {} while requesting "{}"'.format(
        e, url))
except requests.exceptions.Timeout as e:
    logger.exception('TimeOut {} while requesting "{}"'.format(
        e, url))

if retry > 0:
    logger.info('Retrying... (Attempts left: {})'.format(retry))
    return query_user_page(url, retry-1)

logger.error('Giving up.')
return None

标签: python-3.xmultithreadingattributeerrornonetype

解决方案


推荐阅读