From 85b440d8e74d116fc8888a1c457716aa93aad7ce Mon Sep 17 00:00:00 2001 From: ishan-surana Date: Tue, 6 Aug 2024 21:24:17 +0530 Subject: [PATCH] Fixed access errors and updated documentation --- .readthedocs.yaml | 6 +-- MetaDataScraper.egg-info/PKG-INFO | 8 +++- MetaDataScraper/FacebookScraper.py | 49 +++++++++++--------- dist/MetaDataScraper-1.0.3-py3-none-any.whl | Bin 0 -> 13163 bytes dist/metadatascraper-1.0.3.tar.gz | Bin 0 -> 12120 bytes docs/README.md | 12 +++++ docs/conf.py | 29 +++++++++--- docs/index.rst | 15 ++++++ docs/requirements.txt | 6 ++- pyproject.toml | 2 +- 10 files changed, 91 insertions(+), 36 deletions(-) create mode 100644 dist/MetaDataScraper-1.0.3-py3-none-any.whl create mode 100644 dist/metadatascraper-1.0.3.tar.gz diff --git a/.readthedocs.yaml b/.readthedocs.yaml index b62c917..9ca1aa9 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -20,9 +20,9 @@ sphinx: configuration: docs/conf.py # Optionally build your docs in additional formats such as PDF and ePub -# formats: -# - pdf -# - epub +formats: + - pdf + - epub # Optional but recommended, declare the Python requirements required # to build your documentation diff --git a/MetaDataScraper.egg-info/PKG-INFO b/MetaDataScraper.egg-info/PKG-INFO index f378879..eaf1da3 100644 --- a/MetaDataScraper.egg-info/PKG-INFO +++ b/MetaDataScraper.egg-info/PKG-INFO @@ -1,9 +1,15 @@ Metadata-Version: 2.1 Name: MetaDataScraper -Version: 1.0.2 +Version: 1.0.3 Summary: A module designed to automate the extraction of follower counts and post details from a public Facebook page. Author-email: Ishan Surana +Maintainer-email: Ishan Surana Project-URL: Homepage, https://metadatascraper.readthedocs.io/en/latest/ +Project-URL: Documentation, https://metadatascraper.readthedocs.io/en/latest/ +Project-URL: Repository, https://github.com/ishan-surana/MetaDataScraper +Project-URL: Changelog, https://github.com/ishan-surana/MetaDataScraper/releases +Project-URL: Issues, https://github.com/ishan-surana/MetaDataScraper/issues +Keywords: facebook,scraper,meta,selenium,webdriver-manager,automation,web-scraping,web-crawling,web-automation,facebook-scraper,facebook-web-scraper,meta-scraper Classifier: Programming Language :: Python :: 3 Classifier: License :: OSI Approved :: Apache Software License Classifier: Operating System :: Microsoft :: Windows diff --git a/MetaDataScraper/FacebookScraper.py b/MetaDataScraper/FacebookScraper.py index 89ab1da..579ff20 100644 --- a/MetaDataScraper/FacebookScraper.py +++ b/MetaDataScraper/FacebookScraper.py @@ -58,7 +58,8 @@ class LoginlessScraper: ------- To scrape a Facebook page: - ```python + ```python + from MetaDataScraper import LoginlessScraper scraper = LoginlessScraper("page_id") data = scraper.scrape() @@ -190,7 +191,10 @@ def __extract_post_details(self): _c = 1 _error_count = 0 while True: - _xpath = self._xpath_first+str(c)+self._xpath_identifier_addum+self._xpath_last + if _c > 100: + print("Reached 100 posts. Exiting extraction...\n\n") + break + _xpath = self._xpath_first+str(_c)+self._xpath_identifier_addum+self._xpath_last if not self.driver.find_elements(By.XPATH, _xpath): _error_count += 1 if _error_count < 3: @@ -368,7 +372,8 @@ class LoggedInScraper: ------- To scrape a Facebook page: - ```python + ```python + from MetaDataScraper import LoggedInScraper scraper = LoggedInScraper("page_id", "email", "password") data = scraper.scrape() @@ -422,23 +427,22 @@ def __setup_driver(self): def __login(self): """Logs into Facebook using the provided credentials.""" - logged_in = False - while not logged_in: - if self.driver.find_elements(By.ID, 'not_me_link'): - self.driver.find_element(By.ID, 'not_me_link').click() - self.driver.get('https://www.facebook.com/login') - self.driver.find_element(By.NAME, 'email').clear() - self.driver.find_element(By.NAME, 'email').send_keys(self.email) - self.driver.find_element(By.NAME, 'pass').clear() - self.driver.find_element(By.NAME, 'pass').send_keys(self.password) - self.driver.find_element(By.ID, 'loginbutton').click() - # Wait until the login process is completed - WebDriverWait(self.driver, 10).until(EC.url_changes('https://www.facebook.com/login')) - if self.driver.current_url != 'https://www.facebook.com/?sk=welcome': - print("Invalid credentials. Please try again.", end='\r') - else: - print(" "*100, end='\r') - logged_in = True + self._logged_in = False + if self.driver.find_elements(By.ID, 'not_me_link'): + self.driver.find_element(By.ID, 'not_me_link').click() + self.driver.get('https://www.facebook.com/login') + self.driver.find_element(By.NAME, 'email').clear() + self.driver.find_element(By.NAME, 'email').send_keys(self.email) + self.driver.find_element(By.NAME, 'pass').clear() + self.driver.find_element(By.NAME, 'pass').send_keys(self.password) + self.driver.find_element(By.ID, 'loginbutton').click() + # Wait until the login process is completed + WebDriverWait(self.driver, 10).until(EC.url_changes('https://www.facebook.com/login')) + if self.driver.current_url != 'https://www.facebook.com/?sk=welcome': + raise Exception("Invalid credentials. Please try again.") + else: + print(" "*100, end='\r') + self._logged_in = True def __navigate_to_page(self): """Navigates to the specified Facebook page.""" @@ -522,7 +526,7 @@ def __extract_post_details(self): _c = 1 _error_count = 0 while True: - _xpath = self._xpath_first + str(c) + self._xpath_identifier_addum + self._xpath_last + _xpath = self._xpath_first + str(_c) + self._xpath_identifier_addum + self._xpath_last if not self.driver.find_elements(By.XPATH, _xpath): _error_count += 1 if _error_count < 3: @@ -587,6 +591,7 @@ def __extract_post_details(self): def scrape(self): """Initiates the scraping process and returns a dictionary with the scraped data.""" + self._logged_in = False self.__setup_driver() self.__login() self.__navigate_to_page() @@ -595,8 +600,8 @@ def scrape(self): self.__scroll_to_top() self.__get_xpath_constructor() self.__extract_post_details() - self.driver.quit() print("\033[A\033[A\033[A") # DevTools line deleter + self.driver.quit() return { 'followers': self.followers, 'post_texts': self.post_texts, diff --git a/dist/MetaDataScraper-1.0.3-py3-none-any.whl b/dist/MetaDataScraper-1.0.3-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..deebfa12c034d4689da71077893088fc0b8b4c01 GIT binary patch literal 13163 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 literal 0 HcmV?d00001 diff --git a/dist/metadatascraper-1.0.3.tar.gz b/dist/metadatascraper-1.0.3.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..a5c417d749e93ccef042282731a9dbb603cfa00f GIT binary patch literal 12120 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 S{t^R||M;y^1d$90@&5o7jTR9A literal 0 HcmV?d00001 diff --git a/docs/README.md b/docs/README.md index de2cf48..a2cab41 100644 --- a/docs/README.md +++ b/docs/README.md @@ -26,13 +26,25 @@ To use MetaDataScraper, follow these steps: 2. Initialize the scraper with the Facebook page ID: +::::{tab-set} + +:::{tab-item} Loginless ```python page_id = "your_target_page_id" scraper = LoginlessScraper(page_id) + ``` +::: + +:::{tab-item} LoggedIn + ```python + page_id = "your_target_page_id" email = "your_facebook_email" password = "your_facebook_password" scraper = LoggedInScraper(page_id, email, password) ``` +::: + +:::: 3. Scrape the Facebook page to retrieve information: diff --git a/docs/conf.py b/docs/conf.py index d54c4d2..4eab44c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,14 +1,20 @@ # Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html -# -- Project information +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information project = 'MetaDataScraper' +copyright = '2024, Ishan Surana' author = 'Ishan Surana' - +release = '1.0.3' repo_url = 'https://github.com/ishan-surana/MetaDataScraper/' -version = '1.0.0' +version = '1.0.3' -# -- General configuration +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration extensions = [ 'sphinx.ext.duration', @@ -17,7 +23,10 @@ 'sphinx.ext.autosummary', 'sphinx.ext.intersphinx', 'myst_parser', + 'sphinx_design', + 'sphinx_copybutton', ] +myst_enable_extensions = ["colon_fence"] source_suffix = { '.rst': 'restructuredtext', @@ -33,9 +42,15 @@ templates_path = ['_templates'] -# -- Options for HTML output +exclude_patterns = [] + + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output -html_theme = 'sphinx_rtd_theme' +html_theme = 'pydata_sphinx_theme' +html_static_path = ['_static'] # -- Options for EPUB output -epub_show_urls = 'footnote' +epub_show_urls = 'footnote' \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index bba9f2a..0b20a91 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,3 +1,9 @@ +:html_theme.sidebar_secondary.remove: +.. MetaDataScraper documentation master file, created by + sphinx-quickstart on Sun Aug 4 20:19:27 2024. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + Welcome to the MetaDataScraper documentation! =================================== @@ -13,5 +19,14 @@ Contents -------- .. toctree:: + :maxdepth: 2 README + +.. seealso:: + + Source Repository + `GitHub `_ + + Sponsorship + `Sponsorship `_ \ No newline at end of file diff --git a/docs/requirements.txt b/docs/requirements.txt index b590d50..69cd1d3 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,5 @@ sphinx==7.1.2 -sphinx-rtd-theme==1.3.0rc1 -myst_parser \ No newline at end of file +myst_parser +sphinx-design +pydata-sphinx-theme +sphinx-copybutton \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index ba7624a..ee5166d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "MetaDataScraper" -version = "1.0.2" +version = "1.0.3" authors = [ { name="Ishan Surana", email="ishansurana1234@gmail.com" }, ]