bs4 и запрос на вэбскрейпинг - PullRequest
0 голосов
/ 19 января 2020

Миссис, мой объект - получить значение на сайте. Я запустил код:

from bs4 import BeautifulSoup as bs
import requests as rq

url = """https://www.pontofrio.com.br/Eletrodomesticos/GeladeiraeRefrigerador/2Portas/refrigerador-consul-crm43nb-frost-free-branco-386-l-9600908.html?recsource=busca-int&rectype=busca-14"""    

soup = bs(rq.get(url).text, "html.parser")  #html.parser é se nao, uma configuração do construtor bs4.

print(soup)

Но в результате получается ошибка: / В строке 8 у нас есть значение «1880.05». Я думаю, что способ получить цепочку ссылок в:

<script type="application/ld+json"> { "@context": "http://schema.org/", "@type": "Product",  "name": "Refrigerador Consul CRM43NB Frost Free Branco - 386 L ", "offers": { "@type": "Offer", "priceCurrency": "BRL", "availability": "InStock", "price": "1880.05" } } </script>

для получения значения, но я нашел трудности: /

Ошибка:

% Выполнить трассировку cod_vi c .py (последний вызов был последним): файл "C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ urllib3 \ connectionpool.py ", строка 672, в urlopen chunked = chunked, файл" C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ urllib3 \ connectionpool.py ", строка 421, в _make_request six.raise_from ( e, None) Файл "", строка 3, в файле yield_from "C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ urllib3 \ connectionpool.py", строка 416, в _make_request httplib_response = Файл conn.getresponse () "C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ http \ client.py", строка 1336, в файле responseresponbe.begin () "" C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ http \ client.py ", строка 306, в начальной версии, состояние, причина = self._read_status () Fi le "C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ http \ client.py", строка 267, в _read_status line = str (self.fp.readline (_MAXLINE + 1 ), "iso-8859-1") Файл "C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ socket.py", строка 589, в readinto возвращает self._sock. recv_into (b) Файл "C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ ssl.py", строка 1071, в recv_into возвращает файл self.read (nbytes, buffer) File " C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ ssl.py ", строка 929, чтение с возвратом self._sslobj.read (len, buffer) TimeoutError: [WinError 10060] Uma tentativa de conexão falhou porque o Componentte conectado não responsedeu

исправлено в соответствии с действующим законодательством 1019 *

porque o host conectado não 1021 *

Во время обработки вышеупомянутого исключения произошло другое исключение:

Traceback (последний вызов был последним): файл "C: \ Us ers \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ запросы \ adapters.py ", строка 449, в файле тайм-аута отправки = время ожидания" C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ urllib3 \ connectionpool.py ", строка 720, в методе urlopen, url, error = e, _pool = self, _stacktrace = sys.exc_info () [2] Файл" C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ urllib3 \ util \ retry.py ", строка 400, с приращением увеличить файл six.reraise (тип (ошибка), ошибка, _stacktrace)" C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ urllib3 \ packages \ six.py ", строка 734, в ререйзе, увеличить значение. Файл_with_traceback (tb)" C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ urllib3 \ connectionpool.py ", строка 672, в urlopen chunked = chunked, файл" C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ urllib3 \ connectionpool.py ", строка 421, в файле _make_request six.raise_from (e, None)" ", строка 3, в файле Raise_From" C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ urllib3 \ connectionpool.py ", строка 416, в файле _make_request httplib_response = conn.getresponse ()" C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ http \ client.py ", строка 1336, в файле getresponse response.begin ()" C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ http \ client.py ", строка 306, в начальной версии, статус, причина = self._read_status () Файл "C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ http \ client.py", строка 267 , в _read_status line = str (self.fp. файл readline (_MAXLINE + 1), файл "iso-8859-1") "C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ socket.py", строка 589, в readinto вернуть self._sock.recv_into (b) Файл "C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ ssl.py", строка 1071, в recv_into вернуть self.read (nbytes , буфер) Файл "C: \ Users \ Gabriel \ AppData \ Local \ Programs \ Python \ Python37-32 \ lib \ ssl.py", строка 929, чтение с возвратом self._sslobj.read (len, buffer) urllib3 Ошибка responsedeu ', None, 10060, None))

Во время обработки вышеуказанного исключения произошло другое исключение:

Traceback (последний вызов был последним): файл "C: \ Users \ Gabriel \ Desktop \ aula1 \ cod_vi c .py ", строка 6, в soup = bs (rq.get (url) .text," html .parser ") # * 1 056 * .parser é se nao, uma configuração do construtor bs4. Файл "C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ запросы \ api.py", строка 75, в запросе на получение возврата ('get', url, params = params, ** kwargs) Файл "C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ запросы \ api.py", строка 60, в запросе возвращает session.request (method = method, url = url, ** kwargs) Файл "C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ запросы \ sessions.py", строка 533, в запросе resp = self.send (prep, ** send_kwargs ) Файл "C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ запросы \ sessions.py", строка 646, в файле send r = adapter.send (request, ** kwargs) " C: \ Users \ Gabriel \ AppData \ Roaming \ Python \ Python37 \ site-packages \ запросы \ adapters.py ", строка 498, в запросе на отправку connectError (ошибка, запрос = запрос) запросы. Исключения. Соединение прервано. ', TimeoutError (10060,' Uma tentativa de conexão falhou porque o Componentte conectado não Respondeu \ r \ ncorretamente após um período de tempo ou conexão estabelecida falhou \ r \ nporque o host conectado não responsedeu ', Нет, 10060, Нет))

1 Ответ

0 голосов
/ 19 января 2020

Похоже, они проверяют User-Agent . На эту тему уже есть множество solid ресурсов, поэтому я не буду здесь больше рассказывать. Я использовал текущий пользовательский агент моего браузера, который вы можете легко найти здесь или через инструменты / настройки вашего браузера.

Я настроил ваш код:

import requests
from bs4 import BeautifulSoup

url = "https://www.pontofrio.com.br/Eletrodomesticos/Geladeirae" \
      "Refrigerador/2Portas/refrigerador-consul-crm43nb-frost-free-branco-386-l-9600908.html"
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:72.0) Gecko/20100101 Firefox/72.0'}

req = requests.get(url, headers=headers)
soup = BeautifulSoup(req.content, "lxml")  # Use .content, not .text, when passing the data to BeautifulSoup

with open('../out/temp.html', 'w') as out_file:
    out_file.write(soup.prettify())
...