Почему мой findall отвечает [] и иногда отображает данные - PullRequest
0 голосов
/ 07 января 2020
from bs4 import BeautifulSoup
import requests
import urllib.parse
import urllib.request
import re

i = ("james")

url = ("https://www.bing.com/search?q=" + i)

values = {'s': 'basics',
          'submit':'search'}
data = urllib.parse.urlencode(values)

data = data.encode('utf-8')
req = urllib.request.Request(url, data)
resp = urllib.request.urlopen(req)
respData = resp.read()

cites = re.findall(r'<cite>(.*?)</cite>', str(respData))
print (cites)

Выведите [] правильный ответ будет набор ссылок в виде списка, и он будет иногда отображать результаты.

Ответы [ 2 ]

1 голос
/ 07 января 2020

Я могу получить данные, только если я использую настоящий полный User-Agent заголовок

'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:73.0) Gecko/20100101 Firefox/73.0'

, если я не использую 'User-Agent' или использую только 'Mozilla/5.0', тогда я не получаю результаты

Другие элементы не были нужны, но я оставляю их в виде комментария в коде.

Возможно, этот код будет использоваться дольше или чаще, чем для корректной работы. Возможно, ему понадобятся файлы cookie или другие элементы.


Код, который я использовал для проверки различных params, headers, Session / cookies

from bs4 import BeautifulSoup
import requests
#import webbrowser

#s = requests.Session()

#headers = {
#    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:73.0) Gecko/20100101 Firefox/73.0'
#}

#response = s.get("https://www.bing.com", headers=headers)
#print(response.status_code)

params = {
    'q': 'james',
#    'go': 'Wyszukaj', # `Search` in my native, Polish language
#    'qs': 'ds',
#    'form': 'QBRE'
}

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:73.0) Gecko/20100101 Firefox/73.0',
#    'User-Agent': 'Mozilla/5.0',
#    'Referer': 'https://www.bing.com',
}

response = requests.get("https://www.bing.com/search", params=params, headers=headers)
html = response.text

#with open('temp.html', 'w') as f:
#    f.write(html)
#webbrowser.open('temp.html')

soup = BeautifulSoup(html, 'html.parser')
cites = soup.find_all('cite')
print(cites)
0 голосов
/ 07 января 2020

Если вы получили [], проверьте ваш запрос в Bing с помощью браузера. Если вы видите:

There are no results for <your query here>
Check your spelling or try different keywords

нормально получить [] для этого запроса, используя BeautifulSoup, так как результат не возвращается.

...