Skip to content
Snippets Groups Projects
Commit a27b02d7 authored by zfaci2's avatar zfaci2
Browse files

Actor and Movie Scraper methods complete

parents
No related tags found
No related merge requests found
Pipeline #183252 failed
Showing
with 623 additions and 0 deletions
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (WikiScraper)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/WikiScraper.iml" filepath="$PROJECT_DIR$/.idea/WikiScraper.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="dfe2fe6a-3b29-4f33-b3fd-eafecb9dc6a7" name="Default Changelist" comment="" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Python Script" />
</list>
</option>
</component>
<component name="ProjectId" id="1Rwnrzhl8nBDhVHFvVOBCr8JfkC" />
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager" selected="Python.Main">
<configuration name="ActorScraper" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="WikiScraper" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/ActorScraper.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="Main" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="WikiScraper" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/Main.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="MovieScraper" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="WikiScraper" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/MovieScraper.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="Python.Main" />
<item itemvalue="Python.ActorScraper" />
<item itemvalue="Python.MovieScraper" />
</list>
</recent_temporary>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="dfe2fe6a-3b29-4f33-b3fd-eafecb9dc6a7" name="Default Changelist" comment="" />
<created>1570587229309</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1570587229309</updated>
<workItem from="1570587232486" duration="20750000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
</component>
<component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/WikiScraper$Main.coverage" NAME="Main Coverage Results" MODIFIED="1570616606717" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/WikiScraper$ActorScraper.coverage" NAME="ActorScraper Coverage Results" MODIFIED="1570615541260" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
<SUITE FILE_PATH="coverage/WikiScraper$MovieScraper.coverage" NAME="MovieScraper Coverage Results" MODIFIED="1570613310487" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
</component>
</project>
\ No newline at end of file
import urllib.request as request
from bs4 import BeautifulSoup
import re
import logging
def scrape_actor(url):
logging.basicConfig(filename="./logs/ActorScraper_logs.log")
page = request.urlopen(url).read()
page = BeautifulSoup(page, "html.parser")
page.prettify()
vcard = page.find("table", {"class": "infobox biography vcard"})
if vcard is None:
logging.error("Actor vcard not found. Stopping search")
return
actor_name = ""
found_name = vcard.find("div", {"class": "fn"})
if found_name is None:
logging.warning("The actor's name could not be found")
else:
logging.info("The actor's name was found")
actor_name = found_name.get_text()
actor_age = -1
found_age = vcard.find("span", {"class": "noprint ForceAgeToShow"})
if found_age is None:
logging.warning("The actor's age could not be found")
else:
logging.info("The actor's age was found")
actor_age = re.sub("[^0-9]", "", found_age.contents[0])
actor_movies = []
filmography = page.find("span", {"id": "Filmography"})
if filmography is None:
logging.warning("The actor's films could not be found")
else:
logging.info("The actor's films were found")
film_list = filmography.find_next("ul")
film_table = filmography.find_next("tbody")
for film in film_list.findAll("i"):
movie_item = film.find("a")
if movie_item is None:
continue
movie_name = movie_item.get_text()
movie_link = "https://en.wikipedia.org" + movie_item.get("href")
actor_movies.append([movie_name, movie_link])
if len(film_list) == 0:
for film in film_table.findAll("td"):
movie_item = film.find("a")
if movie_item is None:
continue
movie_name = movie_item.get_text()
movie_link = "https://en.wikipedia.org" + movie_item.get("href")
actor_movies.append([movie_name, movie_link])
actor_json = {
"url": url,
"name": actor_name,
"age": actor_age,
"movies": actor_movies
}
return actor_json
#print(scrape_actor("https://en.wikipedia.org/wiki/Piper_Perabo"))
Main.py 0 → 100644
import ActorScraper
import MovieScraper
movie_list = []
actor_list = []
catalyst_movie_url = "https://en.wikipedia.org/wiki/Ted_2"
catalyst_json = MovieScraper.scrape_movie(catalyst_movie_url)
movie_list.append(catalyst_json)
while len(movie_list) < 125 or len(actor_list) < 250:
if len(actor_list) < 125:
for movie in movie_list:
if "cast" in movie:
actors = movie["cast"]
else:
continue
for actor in actors:
if not any(actor[0] == i["name"] for i in actor_list):
print(actor)
actor_details = ActorScraper.scrape_actor(actor[1])
actor_list.append(actor_details)
if len(movie_list) < 125:
for actor in actor_list:
movies = actor["movies"]
for movie in movies:
if not any(movie[0] == i["name"] for i in movie_list):
print(movie)
movie_details = MovieScraper.scrape_movie(movie[1])
movie_list.append(actor_details)
print(len(actor_list))
print(len(movie_list))
\ No newline at end of file
from bs4 import BeautifulSoup
import urllib.request as request
import logging
def scrape_movie(url):
logging.basicConfig(filename="./logs/MovieScraper_logs.log")
page = request.urlopen(url).read()
page = BeautifulSoup(page, "html.parser")
page.prettify()
infobox = page.find("table", {"class": "infobox vevent"})
if infobox is None:
logging.error("Movie info box not found. Stopping search.")
return
movie_name = ""
found_name = infobox.find("th", {"class": "summary"})
if found_name is None:
logging.warning("Movie name could not be found")
else:
logging.info("Movie name was found")
movie_name = found_name.text
movie_gross = -1
found_gross = infobox.find(text="Box office")
if found_gross is None:
logging.warning("Movie gross could not be found")
else:
logging.info("Movie gross was found")
movie_gross = found_gross.find_next("td").contents[0]
movie_cast = []
found_cast = infobox.find(text="Starring")
if found_cast is None:
logging.warning("Movie cast could not be found")
else:
logging.info("Movie cast was found")
found_cast = found_cast.find_next("ul")
cast_a_list = found_cast.findAll("a")
for cast_member in cast_a_list:
cast_member_name = cast_member.get_text()
cast_member_link = "https://en.wikipedia.org" + cast_member.get("href")
movie_cast.append([cast_member_name, cast_member_link])
movies_json = {
"url": url,
"name": movie_name,
"gross": movie_gross,
"cast": movie_cast
}
return movies_json
#print(scrape_movie("https://en.wikipedia.org/wiki/The_Dark_Knight_(film)"))
File added
File added
File added
Beautiful Soup is a library that makes it easy to scrape information
from web pages. It sits atop an HTML or XML parser, providing Pythonic
idioms for iterating, searching, and modifying the parse tree.
# Quick start
```
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup("<p>Some<b>bad<i>HTML")
>>> print soup.prettify()
<html>
<body>
<p>
Some
<b>
bad
<i>
HTML
</i>
</b>
</p>
</body>
</html>
>>> soup.find(text="bad")
u'bad'
>>> soup.i
<i>HTML</i>
#
>>> soup = BeautifulSoup("<tag1>Some<tag2/>bad<tag3>XML", "xml")
#
>>> print soup.prettify()
<?xml version="1.0" encoding="utf-8">
<tag1>
Some
<tag2 />
bad
<tag3>
XML
</tag3>
</tag1>
```
To go beyond the basics, [comprehensive documentation is available](http://www.crummy.com/software/BeautifulSoup/bs4/doc/).
# Links
* [Homepage](http://www.crummy.com/software/BeautifulSoup/bs4/)
* [Documentation](http://www.crummy.com/software/BeautifulSoup/bs4/doc/)
* [Discussion group](http://groups.google.com/group/beautifulsoup/)
* [Development](https://code.launchpad.net/beautifulsoup/)
* [Bug tracker](https://bugs.launchpad.net/beautifulsoup/)
* [Complete changelog](https://bazaar.launchpad.net/~leonardr/beautifulsoup/bs4/view/head:/CHANGELOG)
# Note on Python 2 sunsetting
Since 2012, Beautiful Soup has been developed as a Python 2 library
which is automatically converted to Python 3 code as necessary. This
makes it impossible to take advantages of some features of Python
3.
For this reason, I plan to discontinue Beautiful Soup's Python 2
support at some point after January 1, 2021: one year after the sunset
date for Python 2 itself. Beyond that point, new Beautiful Soup
development will exclusively target Python 3. Of course, older
releases of Beautiful Soup, which support both versions, will continue
to be available.
# Supporting the project
If you use Beautiful Soup as part of your professional work, please consider a
[Tidelift subscription](https://tidelift.com/subscription/pkg/pypi-beautifulsoup4?utm_source=pypi-beautifulsoup4&utm_medium=referral&utm_campaign=readme).
This will support many of the free software projects your organization
depends on, not just Beautiful Soup.
If you use Beautiful Soup for personal projects, the best way to say
thank you is to read
[Tool Safety](https://www.crummy.com/software/BeautifulSoup/zine/), a zine I
wrote about what Beautiful Soup has taught me about software
development.
# Building the documentation
The bs4/doc/ directory contains full documentation in Sphinx
format. Run `make html` in that directory to create HTML
documentation.
# Running the unit tests
Beautiful Soup supports unit test discovery from the project root directory:
```
$ nosetests
```
```
$ python -m unittest discover -s bs4
```
If you checked out the source tree, you should see a script in the
home directory called test-all-versions. This script will run the unit
tests under Python 2, then create a temporary Python 3 conversion of
the source and run the unit tests again under Python 3.
pip
Metadata-Version: 2.0
Name: beautifulsoup4
Version: 4.8.1
Summary: Screen-scraping library
Home-page: http://www.crummy.com/software/BeautifulSoup/bs4/
Author: Leonard Richardson
Author-email: leonardr@segfault.org
License: MIT
Download-URL: http://www.crummy.com/software/BeautifulSoup/bs4/download/
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Text Processing :: Markup :: HTML
Classifier: Topic :: Text Processing :: Markup :: XML
Classifier: Topic :: Text Processing :: Markup :: SGML
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Dist: soupsieve (>=1.2)
Provides-Extra: html5lib
Requires-Dist: html5lib; extra == 'html5lib'
Provides-Extra: lxml
Requires-Dist: lxml; extra == 'lxml'
Beautiful Soup is a library that makes it easy to scrape information
from web pages. It sits atop an HTML or XML parser, providing Pythonic
idioms for iterating, searching, and modifying the parse tree.
# Quick start
```
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup("<p>Some<b>bad<i>HTML")
>>> print soup.prettify()
<html>
<body>
<p>
Some
<b>
bad
<i>
HTML
</i>
</b>
</p>
</body>
</html>
>>> soup.find(text="bad")
u'bad'
>>> soup.i
<i>HTML</i>
#
>>> soup = BeautifulSoup("<tag1>Some<tag2/>bad<tag3>XML", "xml")
#
>>> print soup.prettify()
<?xml version="1.0" encoding="utf-8">
<tag1>
Some
<tag2 />
bad
<tag3>
XML
</tag3>
</tag1>
```
To go beyond the basics, [comprehensive documentation is available](http://www.crummy.com/software/BeautifulSoup/bs4/doc/).
# Links
* [Homepage](http://www.crummy.com/software/BeautifulSoup/bs4/)
* [Documentation](http://www.crummy.com/software/BeautifulSoup/bs4/doc/)
* [Discussion group](http://groups.google.com/group/beautifulsoup/)
* [Development](https://code.launchpad.net/beautifulsoup/)
* [Bug tracker](https://bugs.launchpad.net/beautifulsoup/)
* [Complete changelog](https://bazaar.launchpad.net/~leonardr/beautifulsoup/bs4/view/head:/CHANGELOG)
# Note on Python 2 sunsetting
Since 2012, Beautiful Soup has been developed as a Python 2 library
which is automatically converted to Python 3 code as necessary. This
makes it impossible to take advantages of some features of Python
3.
For this reason, I plan to discontinue Beautiful Soup's Python 2
support at some point after January 1, 2021: one year after the sunset
date for Python 2 itself. Beyond that point, new Beautiful Soup
development will exclusively target Python 3. Of course, older
releases of Beautiful Soup, which support both versions, will continue
to be available.
# Supporting the project
If you use Beautiful Soup as part of your professional work, please consider a
[Tidelift subscription](https://tidelift.com/subscription/pkg/pypi-beautifulsoup4?utm_source=pypi-beautifulsoup4&utm_medium=referral&utm_campaign=readme).
This will support many of the free software projects your organization
depends on, not just Beautiful Soup.
If you use Beautiful Soup for personal projects, the best way to say
thank you is to read
[Tool Safety](https://www.crummy.com/software/BeautifulSoup/zine/), a zine I
wrote about what Beautiful Soup has taught me about software
development.
# Building the documentation
The bs4/doc/ directory contains full documentation in Sphinx
format. Run `make html` in that directory to create HTML
documentation.
# Running the unit tests
Beautiful Soup supports unit test discovery from the project root directory:
```
$ nosetests
```
```
$ python -m unittest discover -s bs4
```
If you checked out the source tree, you should see a script in the
home directory called test-all-versions. This script will run the unit
tests under Python 2, then create a temporary Python 3 conversion of
the source and run the unit tests again under Python 3.
beautifulsoup4-4.8.1.dist-info/DESCRIPTION.rst,sha256=TUEndO1FnBoCMGIeuX9tkAhKSylXB1t_NUSYxDo6ce4,3010
beautifulsoup4-4.8.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
beautifulsoup4-4.8.1.dist-info/METADATA,sha256=ZQSTtI3Y6TP3LVrckhEel5QhfhqT8pwwvBuronGBz34,4020
beautifulsoup4-4.8.1.dist-info/RECORD,,
beautifulsoup4-4.8.1.dist-info/WHEEL,sha256=rNo05PbNqwnXiIHFsYm0m22u4Zm6YJtugFG2THx4w3g,92
beautifulsoup4-4.8.1.dist-info/metadata.json,sha256=RNf83TEq3M65TUoCk_oElvbCdiLyo_AQuj0f7SNVEGc,1144
beautifulsoup4-4.8.1.dist-info/top_level.txt,sha256=H8VT-IuPWLzQqwG9_eChjXDJ1z0H9RRebdSR90Bjnkw,4
bs4/__init__.py,sha256=VF0X3wc9hsmeJiMt630mwChrwIc58DYt4c9vP2ky-w4,25903
bs4/__pycache__/__init__.cpython-37.pyc,,
bs4/__pycache__/check_block.cpython-37.pyc,,
bs4/__pycache__/dammit.cpython-37.pyc,,
bs4/__pycache__/diagnose.cpython-37.pyc,,
bs4/__pycache__/element.cpython-37.pyc,,
bs4/__pycache__/formatter.cpython-37.pyc,,
bs4/__pycache__/testing.cpython-37.pyc,,
bs4/builder/__init__.py,sha256=e_vTLD3AkgUTjUXkc04b0FZHJBRaVM8SDxvVNMnLXtE,14749
bs4/builder/__pycache__/__init__.cpython-37.pyc,,
bs4/builder/__pycache__/_html5lib.cpython-37.pyc,,
bs4/builder/__pycache__/_htmlparser.cpython-37.pyc,,
bs4/builder/__pycache__/_lxml.cpython-37.pyc,,
bs4/builder/_html5lib.py,sha256=105ocel2oFeApKaPem5XtjL67kO5rKJxM5_6B2gxBw0,18088
bs4/builder/_htmlparser.py,sha256=AKpOnUAoPBYi7x0Y1fTb1Uxrxb2EFroWIdCWgwShcF4,13653
bs4/builder/_lxml.py,sha256=BsJBgIoyIZYY001TSHLtEsJtYD5hCXhldwpUEaYaJkg,11114
bs4/check_block.py,sha256=ltAO73VRGrGcO0bVPMd0GdTlIg9eVTCGnnZiPbKzFI0,132
bs4/dammit.py,sha256=VcHa3eSGP6bL3UuCrjMy_auYO7tTH42I-lhNDbrMsy8,31028
bs4/diagnose.py,sha256=wvGDZf6VNj6rwDjU3xOsz90z2KZiBWgpu-GRqWfR6is,6966
bs4/element.py,sha256=ebosrK3jVgnZ4Dr7kmrJdfRUu8JkENXKQHwNKPcA2QE,59447
bs4/formatter.py,sha256=G2AYBRjeX404vLNwIPbjiG8KDjuoCqrgi9NHua6o34M,3199
bs4/testing.py,sha256=MBsN77WRpB1Z78Y0pV7RlwbMWGfEU1iPySFKE-JJIgc,41306
bs4/tests/__init__.py,sha256=bdUBDE750n7qNEfue7-3a1fBaUxJlvZMkvJvZa-lbYs,27
bs4/tests/__pycache__/__init__.cpython-37.pyc,,
bs4/tests/__pycache__/test_builder_registry.cpython-37.pyc,,
bs4/tests/__pycache__/test_docs.cpython-37.pyc,,
bs4/tests/__pycache__/test_html5lib.cpython-37.pyc,,
bs4/tests/__pycache__/test_htmlparser.cpython-37.pyc,,
bs4/tests/__pycache__/test_lxml.cpython-37.pyc,,
bs4/tests/__pycache__/test_soup.cpython-37.pyc,,
bs4/tests/__pycache__/test_tree.cpython-37.pyc,,
bs4/tests/test_builder_registry.py,sha256=pllfRpArh9TYhjjRUiu1wITr9Ryyv4hiaAtRjij-k4E,5582
bs4/tests/test_docs.py,sha256=FXfz2bGL4Xe0q6duwpmg9hmFiZuU4DVJPNZ0hTb6aH4,1067
bs4/tests/test_html5lib.py,sha256=R2zNUUbUa3WnSqGGOiARKDWH1TLguogluqQDr10Gick,6493
bs4/tests/test_htmlparser.py,sha256=N-wPX5jDOy7b8xUv9pHEIEfEFjOitLuD9V1blKcbscM,2354
bs4/tests/test_lxml.py,sha256=xJr8eDrtHSb_vQw88lYEKyfdM1Hel4-dBaz14vQq78M,4105
bs4/tests/test_soup.py,sha256=JbjlyIKCmUnVNfEHq3aPjyj-w7WZEgE9cAV-LOx6xwo,27613
bs4/tests/test_tree.py,sha256=XBRpEOpAEvDhOeSSN857U5OcjdvfqmYT3bDNN8Qbabw,86259
Wheel-Version: 1.0
Generator: bdist_wheel (0.29.0)
Root-Is-Purelib: true
Tag: py3-none-any
{"classifiers": ["Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Topic :: Text Processing :: Markup :: HTML", "Topic :: Text Processing :: Markup :: XML", "Topic :: Text Processing :: Markup :: SGML", "Topic :: Software Development :: Libraries :: Python Modules"], "download_url": "http://www.crummy.com/software/BeautifulSoup/bs4/download/", "extensions": {"python.details": {"contacts": [{"email": "leonardr@segfault.org", "name": "Leonard Richardson", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "http://www.crummy.com/software/BeautifulSoup/bs4/"}}}, "extras": ["html5lib", "lxml"], "generator": "bdist_wheel (0.29.0)", "license": "MIT", "metadata_version": "2.0", "name": "beautifulsoup4", "run_requires": [{"extra": "html5lib", "requires": ["html5lib"]}, {"extra": "lxml", "requires": ["lxml"]}, {"requires": ["soupsieve (>=1.2)"]}], "summary": "Screen-scraping library", "version": "4.8.1"}
\ No newline at end of file
bs4
This diff is collapsed.
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment