python-3.x - 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 - 如何让 YoloV5 通过屏幕抓取进行检测?
- python - 如何在侧 docker 容器中访问 LAN 网络
- python - 为什么我不能在 Tkinter 的网格中间放置标签?
- python - vlc 视频上的透明小部件问题
- android - Flutter:如何正确读取 JSON 中的字段?
- python - 如何运行 Python".exe" 不是由 >python"myscript.py" 生成的
- azure - Azure EA 部署
- java - 在 Netty 4 中从 ByteBuf 构造 HTTP 块
- sql - 查找 2019 年比 2018 年订购更多的客户 ID
- reactjs - React.js 和 Odoo CORS 和 auth 验证问题