получить URL первого хита [webscraping python] - PullRequest
0 голосов
/ 15 марта 2019

У меня есть куча запросов Google, для которых я хотел бы получить URL для первого попадания.

кусок моего кода:

import requests

query = 'hello world'
url = 'http://google.com/search?q=' + query
page= requests.get(url)
print(url)

Тогда я хотел бы получить первый хитовый сайт Google, в данном случае страницу Википедии: https://en.wikipedia.org/wiki/%22Hello,_World!%22_program

У меня есть остальная часть кода, но я не знаю, как получить URL.

Ответы [ 3 ]

0 голосов
/ 15 марта 2019

Вы можете использовать BeautifulSoup для поиска веб-результатов, а затем найти первый элемент, который возвращает href:

import requests
import bs4

query = 'hello world'
url = 'http://google.com/search?q=' + query

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}
page= requests.get(url, headers=headers)

soup = bs4.BeautifulSoup(page.text, 'html.parser')

for elem in soup(text='Web results'):
    print (elem.find_next('a')['href'])

Выход:

print (elem.find_next('a')['href'])


https://en.wikipedia.org/wiki/%22Hello,_World!%22_program
0 голосов
/ 15 марта 2019

Вы можете использовать select_one, чтобы ограничить первое совпадение. Используйте класс r, чтобы ограничить результаты. Селекторы классов и типов быстрее использовать, чем атрибуты, поэтому я использую r и a.

import requests
from bs4 import BeautifulSoup as bs
query = 'hello world'
url = 'http://google.com/search?q=' + query
page= requests.get(url)
soup = bs(page.content, 'lxml')
print(soup.select_one('.r a')['href'])
0 голосов
/ 15 марта 2019

Я бы предложил использовать что-то вроде Beautiful Soup для нацеливания на элементы HTML, которые содержат URL-адреса результатов.Затем вы можете сохранить URL-адрес и делать с ним все что угодно.

import requests
from bs4 import BeautifulSoup

query = 'hello world'
url = 'http://google.com/search?q=' + query
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')

for link in soup.find_all('a'):
    print(link.get('href'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...