#python #pandas #facebook
#python #pandas #Facebook
Вопрос:
Это мой первый код, поскольку я делаю проект для колледжа. Я пытаюсь выяснить, как искать на страницах Facebook конкретную информацию обо всех библиотеках в моем штате во время пандемии этого года. Я стремлюсь исследовать поведение этих страниц, извлекая:
Название библиотеки идентификатор публикации публикация изображение видео время ссылка лайки комментарии
Здесь я хотел бы сделать две вещи:
Извлечение даты Создайте таблицу категорий внутри извлеченной информации без необходимости сохранять ее в CSV в Excel.
Проблема
При сохранении в CSV я продолжаю получать ошибку тайм-аута. При запуске без кода сохранения в csv он работает нормально.
Это ошибка, которую я получаю при сохранении в нем в CSV
gaierror Traceback (most recent call last)
~AppDataLocalProgramsPythonPython39libsite-packagesurllib3connection.py in _new_conn(self)
158 try:
--> 159 conn = connection.create_connection(
160 (self._dns_host, self.port), self.timeout, **extra_kw
~AppDataLocalProgramsPythonPython39libsite-packagesurllib3utilconnection.py in create_connection(address, timeout, source_address, socket_options)
60
---> 61 for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
62 af, socktype, proto, canonname, sa = res
~AppDataLocalProgramsPythonPython39libsocket.py in getaddrinfo(host, port, family, type, proto, flags)
952 addrlist = []
--> 953 for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
954 af, socktype, proto, canonname, sa = res
gaierror: [Errno 11001] getaddrinfo failed
During handling of the above exception, another exception occurred:
NewConnectionError Traceback (most recent call last)
~AppDataLocalProgramsPythonPython39libsite-packagesurllib3connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
669 # Make the request on the httplib connection object.
--> 670 httplib_response = self._make_request(
671 conn,
~AppDataLocalProgramsPythonPython39libsite-packagesurllib3connectionpool.py in _make_request(self, conn, method, url, timeout, chunked, **httplib_request_kw)
380 try:
--> 381 self._validate_conn(conn)
382 except (SocketTimeout, BaseSSLError) as e:
~AppDataLocalProgramsPythonPython39libsite-packagesurllib3connectionpool.py in _validate_conn(self, conn)
977 if not getattr(conn, "sock", None): # AppEngine might not have `.sock`
--> 978 conn.connect()
979
~AppDataLocalProgramsPythonPython39libsite-packagesurllib3connection.py in connect(self)
308 # Add certificate verification
--> 309 conn = self._new_conn()
310 hostname = self.host
~AppDataLocalProgramsPythonPython39libsite-packagesurllib3connection.py in _new_conn(self)
170 except SocketError as e:
--> 171 raise NewConnectionError(
172 self, "Failed to establish a new connection: %s" % e
NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x00000209EBB45C10>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed
During handling of the above exception, another exception occurred:
MaxRetryError Traceback (most recent call last)
~AppDataLocalProgramsPythonPython39libsite-packagesrequestsadapters.py in send(self, request, stream, timeout, verify, cert, proxies)
438 if not chunked:
--> 439 resp = conn.urlopen(
440 method=request.method,
~AppDataLocalProgramsPythonPython39libsite-packagesurllib3connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, **response_kw)
725
--> 726 retries = retries.increment(
727 method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
~AppDataLocalProgramsPythonPython39libsite-packagesurllib3utilretry.py in increment(self, method, url, response, error, _pool, _stacktrace)
445 if new_retry.is_exhausted():
--> 446 raise MaxRetryError(_pool, url, error or ResponseError(cause))
447
MaxRetryError: HTTPSConnectionPool(host='m.facebook.com', port=443): Max retries exceeded with url: /page_content_list_view/more/?page_id=705959662852579amp;start_cursor={"timeline_cursor%22:"AQHR3T-djz3rSrAJEo0g6i_h4IV3wSe3889MJeW2HfvpwnoRtouUloPvUdjPznXSh2B_jgmq9dLTrMJjKSlJ33uT4UsdE0hEoO9Clrawerg7iJC6Y6dbykg9uDvewPhm-TCs%22,"timeline_section_cursor%22:null,"has_next_page%22:true}amp;num_to_fetch=4amp;surface_type=posts_tab (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000209EBB45C10>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))
During handling of the above exception, another exception occurred:
ConnectionError Traceback (most recent call last)
<ipython-input-3-e17e43b93409> in <module>
88 for biblioteca in listaBibliotecas:
89 print("Biblioteca: " biblioteca)
---> 90 for post in get_posts(biblioteca, pages=700):
91 post['title'] = biblioteca
92 print(post['title'])
~AppDataLocalProgramsPythonPython39libsite-packagesfacebook_scraperfacebook_scraper.py in _generic_get_posts(self, extract_post_fn, iter_pages_fn, page_limit, options)
93
94 logger.debug("Starting to iterate pages")
---> 95 for i, page in zip(counter, iter_pages_fn()):
96 logger.debug("Extracting posts from page %s", i)
97 for post_element in page:
~AppDataLocalProgramsPythonPython39libsite-packagesfacebook_scraperpage_iterators.py in generic_iter_pages(start_url, page_parser_cls, request_fn)
28 while next_url:
29 logger.debug("Requesting page from: %s", next_url)
---> 30 response = request_fn(next_url)
31
32 logger.debug("Parsing page response")
~AppDataLocalProgramsPythonPython39libsite-packagesfacebook_scraperfacebook_scraper.py in get(self, url, **kwargs)
55 def get(self, url, **kwargs):
56 try:
---> 57 response = self.session.get(url=url, **self.requests_kwargs, **kwargs)
58 response.raise_for_status()
59 return response
~AppDataLocalProgramsPythonPython39libsite-packagesrequestssessions.py in get(self, url, **kwargs)
541
542 kwargs.setdefault('allow_redirects', True)
--> 543 return self.request('GET', url, **kwargs)
544
545 def options(self, url, **kwargs):
~AppDataLocalProgramsPythonPython39libsite-packagesrequestssessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
528 }
529 send_kwargs.update(settings)
--> 530 resp = self.send(prep, **send_kwargs)
531
532 return resp
~AppDataLocalProgramsPythonPython39libsite-packagesrequestssessions.py in send(self, request, **kwargs)
641
642 # Send the request
--> 643 r = adapter.send(request, **kwargs)
644
645 # Total elapsed time of the request (approximately)
~AppDataLocalProgramsPythonPython39libsite-packagesrequestsadapters.py in send(self, request, stream, timeout, verify, cert, proxies)
514 raise SSLError(e, request=request)
515
--> 516 raise ConnectionError(e, request=request)
517
518 except ClosedPoolError as e:
ConnectionError: HTTPSConnectionPool(host='m.facebook.com', port=443): Max retries exceeded with url: /page_content_list_view/more/?page_id=705959662852579amp;start_cursor={"timeline_cursor%22:"AQHR3T-djz3rSrAJEo0g6i_h4IV3wSe3889MJeW2HfvpwnoRtouUloPvUdjPznXSh2B_jgmq9dLTrMJjKSlJ33uT4UsdE0hEoO9Clrawerg7iJC6Y6dbykg9uDvewPhm-TCs%22,"timeline_section_cursor%22:null,"has_next_page%22:true}amp;num_to_fetch=4amp;surface_type=posts_tab (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000209EBB45C10>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))
Желаемый результат
Таблица с извлеченной информацией.
Код
import facebook_scraper
from facebook_scraper import get_posts
listaBibliotecas = ["bibliotecafoa",
"Bibvet-UNESP-Biblioteca-Faculdade-de-Medicina-Veterinária-de-Araçatuba-126301131191734",
"BibliotecaFCLAr",
"BibliotecaInstitutodeQuimicaUnesp",
"biblioassisunesp",
"bibliotecaunespbauru",
"bboUNESP",
"bibliotecafcaunesp",
"bdrunesp",
"bibliotecaunespfranca",
"bibliotecaunespjaboticabal",
"bibliotecaunespmarilia",
"bibliotecaourinhos",
"bibliounespprudente",
"bre.unesp",
"biblioteca.rioclaro",
"Unesp.bro",
"Biblioteca.Ibilce.Unesp",
"biblio.ictunesp",
"Biblioteca-Unesp-Sorocaba-360009187409775",
"bibliotecaunesp.tupa",
"bibliotecabrasilianamindlinusp",
"BibliotecaCQUSP",
"Biblioteca-EACH-USP-Leste-308809459193048",
"ecabiblioteca",
"bibeefe",
"bibliotecaeescusp",
"DVBIBL.Poli",
"bibliotecaesalq",
"bibfauusp",
"Biblioteca-da-FDUSP-553522528001156",
"bibliotecafeusp",
"bibliotecafeausp",
"bibliotecaflorestanfernandes",
"bibliotecafmusp",
"DBDFMUSP",
"bibliotecafmvzusp",
"sdousp",
"bibfsp",
"bibliotecafzea",
"Biblioteca-do-IAU-USP-1887490454816888",
"BibliotecaIBUSP",
"BibliotecaICMC",
"Biblioteca.iee",
"bibliotecadafisica",
"bibliotecaifsc",
"BibliotecaInstitutoDeGeocienciasUsp",
"bibliotecairiusp",
"bibliotecairiusp",
"bibliotecairiusp",
"boraunicamp",
"BibliotecaCentralCesarLattes",
"biblioteca.bae",
"biblioteca.cotuca",
"bibliotecaFtUnicamp",
"fcabiblioteca",
"BibliotecaFCMUnicamp",
"BibliotecaFEF",
"bibliotecadafea",
"bibliotecafopunicamp",
"bibliotecaFtUnicamp",
"bibliotecadoia",
"Biblioteca-do-Instituto-de-Biologia-da-Unicamp-1130014760360973",
"BibEcoUnicamp",
"bibliotecaiel",
"BibliotecaIFCH",
"biblioteca.ige",
"IMECCUnicampBR",
"bibliotecaIQ",
"cedulabeurb",
"bibliotecapagu",
"BCoUFSCar",
"Biblioteca-Campus-Araras-UFSCar-275299496221531",
"bso.ufscar",
"BibliotecaLagoadoSino",
"biblioteca.bs",
"BibliotecaEPPEN",
"Biblioteca-EFLCH-Unifesp-Guarulhos-104713047826227",
"Biblioteca-ICT-Unifesp-campus-São-José-dos-Campos-340105403073716",
"Biblioteca-ICAQF-Unifesp-Diadema-496670690459414",
"Biblioteca-Campus-São-Paulo-Unifesp-147132782023686",
"biblioteca.ufabc"]
for biblioteca in listaBibliotecas:
print("Biblioteca: " biblioteca)
for post in get_posts(biblioteca, pages=300):
post['title'] = biblioteca
print(post['title'])
print(post['post_id'])
print(post['time'])
print(post['text'])
print(post['image'])
print(post['video'])
print(post['likes'])
print(post['comments'])
print(post['shares'])
print(post['link'])
print("==========================================================================================")
Возможно ли это?
Если да, то каков наилучший способ получить ожидаемый результат?
Большое спасибо
Ответ №1:
Просто добавьте оператор try-Exception и посмотрите, является ли результат null или нет. Если вывод равен null, это может быть ошибка в том, как вы используете библиотеку:
for biblioteca in listaBibliotecas:
print("Biblioteca: " biblioteca)
all_posts = []
try:
all_posts = get_posts(biblioteca, pages=300)
except Exception:
print(f"Error while requesting Biblioteca: {biblioteca}")
print("Checking the next one..")
for post in all_posts:
post['title'] = biblioteca
print(post['title'])
print(post['post_id'])
print(post['time'])
print(post['text'])
print(post['image'])
print(post['video'])
print(post['likes'])
print(post['comments'])
print(post['shares'])
print(post['link'])
print("==========================================================================================")
Комментарии:
1. Привет, Лейн, большое спасибо за это. Я изучаю физические библиотеки, чтобы вы поняли. Я попробовал ваше исправление, и, похоже, оно исправило ошибку при очистке данных, но я до сих пор не знаю, как преобразовать ее в таблицу.
2. При добавлении файла write csv в algaritm, если у меня длинный набор данных, я получаю эту ошибку ————————————————————————— Трассировка ошибки ОС (последний последний вызов) <ipython-input-2-668f17161d98> в <модуле> 111 соткрыть («2811fbcode.csv», «a», новая строка =»», кодировка =»utf-8″) как f: 112 writer = csv.writer(f) —> 113 writer.writerow(данные) 114 115 распечатать(«================================================================================») Ошибка: [Ошибка 22] Недопустимый аргумент