Сканирование списка URL для поиска в Google с помощью python - PullRequest
0 голосов
/ 29 августа 2018

Я бы хотел очистить URL-адрес результатов поиска Google с помощью Python.

Вот мой код

import requests
from bs4 import BeautifulSoup

def search(keyword):        
    html = requests.get('https://www.google.co.kr/search?q={}&num=100&sourceid=chrome&ie=UTF-8'.format(keyword)).text
    soup = BeautifulSoup(html, 'html.parser')
    result = []
    for i in soup.find_all('h3', {'class':'r'}):
        result.append(i.find('a', href = True) ['href'][7:])
    return result

search('computer')

Тогда я могу получить результат. Первый URL-адрес в списке - это wikipedia.com,

https://en.wikipedia.org/wiki/Computer&sa=U&ved=0ahUKEwixyfu7q5HdAhWR3lQKHUfoDcsQFggTMAA&usg=AOvVaw2nvT-2sO4iJenW_fkyCS3i', '? Д = Компьютер & Num = 100 & т.е. = UTF-8 & PRMD = ivnsbp & TBM = Isch & ТВО = и & источник = Univ & са = Х & вед = 0ahUKEwixyfu7q5HdAhWR3lQKHUfoDcsQsAQIHg' * +1010 *

Я хочу получить чистый URL, то есть 'https://en.wikipedia.org/wiki/Computer', включая все остальные результаты поиска в этом случае.

Как мне изменить мои коды?

Отредактировано : Как вы видите на изображении ниже, я хочу получить реальный URL (отмечен желтым), а не грязный и длинный URL выше.

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Я нашел решение.

Эта модификация в функции поиска работает.

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36'}     
    html = requests.get('https://www.google.co.kr/search?q={}&num=100&sourceid=chrome&ie=UTF-8'.format(keyword), headers = headers).text
0 голосов
/ 29 августа 2018

Как насчет добавления

.split('&')[0]

к вашему коду таким образом, чтобы он стал:

import requests
from bs4 import BeautifulSoup

def search(keyword):
    html = requests.get('https://www.google.co.kr/search?q={}&num=100&sourceid=chrome&ie=UTF-8'.format(keyword)).text
    soup = BeautifulSoup(html, 'html.parser')
    result = []
    for i in soup.find_all('h3', {'class':'r'}):
        result.append(i.find('a', href = True) ['href'][7:].split('&')[0])
    return result

search('computer')

[EDIT]

Взяв https://en.wikipedia.org/wiki/Computer в качестве примера:

С помощью инструментов разработчика Chrome URL-адрес выглядит чистым.

Так как он принадлежит <h3 class="r">, ваш код должен работать нормально и возвращать чистый URL.

Вместо этого, если вы замените

result.append(i.find('a', href = True) ['href'][7:])

с

print i

тогда в моем терминале он возвращает следующее по вышеуказанной ссылке:

/url?q=https://en.wikipedia.org/wiki/Computer&amp;sa=U&amp;ved=0ahUKEwinqcqdypHdAhVhKH0KHVWIBEUQFggfMAU&amp;usg=AOvVaw1pduIWw_TSCJUxtP9W_kHJ

вы можете видеть, что /url?q= был добавлен, а &amp;sa=U&amp;ved=0ahUKEwinqcqdypHdAhVhKH0KHVWIBEUQFggfMAU&amp;usg=AOvVaw1pduIWw_TSCJUxtP9W_kHJ добавлен.

Просматривая и другие ссылки, я заметил, что предварительно добавленная часть всегда выглядит как /url?q=, а добавленная часть всегда начинается с &.

Поэтому я считаю, что мой оригинальный ответ должен сработать:

result.append(i.find('a', href = True) ['href'][7:].split('&')[0])

[7:] удаляет предварительно добавленную строку, а split('&')[0] добавленную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...