I am trying to use the betbrain.py from Github (https://github.com/gto76/betbrain-scraper) that has the following code:
#!/usr/bin/python3 # # Usage: betbrain.py [URL or FILE] [OUTPUT-FILE] # Scrapes odds from passed betbrain page and writes them to # stdout, or file if specified. import os import sys import urllib.request from bs4 import BeautifulSoup from http.cookiejar import CookieJar import parser_betbrain import printer DEFAULT_URL = 'https://www.betbrain.com/football/england/premier-league/#!/matches/' # If no arguments are present, it parses the default page. # Argument can be an URL or a local file. def main(): html = getHtml(sys.argv) soup = BeautifulSoup(html, "html.parser") matches = parser_betbrain.getMatches(soup) string = printer.matchesToString(matches) output(string, sys.argv) def getHtml(argv): if len(argv) <= 1: return scrape(DEFAULT_URL) elif argv[1].startswith("http"): return scrape(argv[1]) else: return readFile(argv[1]) # Returns html file located at URL. def scrape(url): cj = CookieJar() opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj)) try: return opener.open(url) except ValueError: error("Invalid URL: " + url) def readFile(path): try: return open(path, encoding='utf8') except IOError: error("Invalid input filename: " + path) def output(string, argv): if len(argv) <= 2: print(string) else: writeFile(argv[2], string) def writeFile(path, string): try: fo = open(path, "w", encoding='utf8') fo.write(string); fo.close() except IOError: error("Invalid output filename: " + path) def error(msg): msg = os.path.basename(__file__)+": "+msg print(msg, file=sys.stderr) sys.exit(1) if __name__ == '__main__': main()
However when run it comes back with this error
Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1318, in do_open encode_chunked=req.has_header('Transfer-encoding')) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1239, in request self._send_request(method, url, body, headers, encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1285, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1234, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1026, in _send_output self.send(msg) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 964, in send self.connect() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py", line 1400, in connect server_hostname=server_hostname) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 401, in wrap_socket _context=self, _session=session) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 808, in __init__ self.do_handshake() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 1061, in do_handshake self._sslobj.do_handshake() File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py", line 683, in do_handshake self._sslobj.do_handshake() ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/Daniel/Desktop/betbrain-scraper-master 2/betbrain.py", line 71, in <module> main() File "/Users/Daniel/Desktop/betbrain-scraper-master 2/betbrain.py", line 22, in main html = getHtml(sys.argv) File "/Users/Daniel/Desktop/betbrain-scraper-master 2/betbrain.py", line 30, in getHtml return scrape(DEFAULT_URL) File "/Users/Daniel/Desktop/betbrain-scraper-master 2/betbrain.py", line 41, in scrape return opener.open(url) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 526, in open response = self._open(req, data) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 544, in _open '_open', req) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 504, in _call_chain result = func(*args) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1361, in https_open context=self._context, check_hostname=self._check_hostname) File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py", line 1320, in do_open raise URLError(err) urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)>
How can I fix this problem? I am running Python 3.6.0 on MacOS 10.12.1
What Causes an SSL Certificate_Verify_Failed Error? SSL certificate_verify_failed errors typically occur as a result of outdated Python default certificates or invalid root certificates. If you're a website owner and you're receiving this error, it could be because you're not using a valid SSL certificate.
The Ruby OpenSSL error certificate verify failed means your code can't verify that the SSL certificate of the website or API you're connecting to is the real one. It's important to solve this issue correctly to keep your communication secure.
An SSL certificate error occurs when the browser cannot verify the SSL certificates returned by the server. When the error happens, the browser blocks the website and warns the user that the website cannot be trusted as shown below. These warnings will negatively impact the user's trust in your website.
I ran this on MacOS /Applications/Python\ 3.6/Install\ Certificates.command
Open a terminal and take a look at:
/Applications/Python 3.6/Install Certificates.command
Python 3.6 on MacOS uses an embedded version of OpenSSL, which does not use the system certificate store. More details here.
(To be explicit: MacOS users can probably resolve by opening Finder and double clicking Install Certificates.command)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With