Получить результаты поиска Bing в Python - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь создать чат-бота, который может получать результаты поиска Bing, используя Python. Я перепробовал много сайтов, но все они используют старый код Python 2 или Google. В настоящее время я нахожусь в Китае и не могу получить доступ к YouTube, Google или к чему-либо еще, связанному с Google (также не могу использовать Azure и документы Microsoft). Я хочу, чтобы результаты были такими:

This is the title
https://this-is-the-link.com

This is the second title
https://this-is-the-second-link.com

Код

import requests
import bs4
import re
import urllib.request
from bs4 import BeautifulSoup
page = urllib.request.urlopen("https://www.bing.com/search?q=programming")
soup = BeautifulSoup(page.read())
links = soup.findAll("a")
for link in links:
    print(link["href"])

И это дает мне

/?FORM=Z9FD1
javascript:void(0);
javascript:void(0);
/rewards/dashboard
/rewards/dashboard
javascript:void(0);
/?scope=web&FORM=HDRSC1
/images/search?q=programming&FORM=HDRSC2
/videos/search?q=programming&FORM=HDRSC3
/maps?q=programming&FORM=HDRSC4
/news/search?q=programming&FORM=HDRSC6
/shop?q=programming&FORM=SHOPTB
http://go.microsoft.com/fwlink/?LinkId=521839
http://go.microsoft.com/fwlink/?LinkID=246338
https://go.microsoft.com/fwlink/?linkid=868922
http://go.microsoft.com/fwlink/?LinkID=286759
https://go.microsoft.com/fwlink/?LinkID=617297

Любая помощь будет принята с благодарностью (я м, используя Python 3.6.9 в Ubuntu)

1 Ответ

0 голосов
/ 15 апреля 2020

На самом деле, написанный вами код работает правильно, проблема в заголовках HTTP-запроса. По умолчанию urllib использует Python-urllib/{version} в качестве значения заголовка User-Agent, что позволяет веб-сайту распознавать ваш запрос как автоматически сгенерированный. Чтобы избежать этого, вы должны использовать пользовательское значение, которое может быть достигнуто, передав Request объект в качестве первого параметра urlopen():

from urllib.parse import urlencode, urlunparse
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup

query = "programming"
url = urlunparse(("https", "www.bing.com", "/search", "", urlencode({"q": query}), ""))
custom_user_agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
req = Request(url, headers={"User-Agent": custom_user_agent})
page = urlopen(req)
# Further code I've left unmodified
soup = BeautifulSoup(page.read())
links = soup.findAll("a")
for link in links:
    print(link["href"])

PS Посмотрите на комментарий оставлено @edd под вашим вопросом.

...