Очистка Google Scholar с помощью urllib2 вместо запросов - PullRequest
0 голосов
/ 30 января 2019

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

import urllib
import urllib2
import requests
from bs4 import BeautifulSoup

SEARCH_SCHOLAR_HOST = "https://scholar.google.com"
SEARCH_SCHOLAR_URL = "/scholar"

def searchScholar(searchStr, limit=10):
    """Search Google Scholar for articles and publications containing terms of interest"""
    url = SEARCH_SCHOLAR_HOST + SEARCH_SCHOLAR_URL + "?q=" + urllib.quote_plus(searchStr) + "&ie=UTF-8&oe=UTF-8&hl=en&btnG=Search"
    content = requests.get(url, verify=False).text
    page = BeautifulSoup(content, 'lxml')
    results = {}
    count = 0
    for entry in page.find_all("h3", attrs={"class": "gs_rt"}):
        if count < limit:
            try:
                text = entry.a.text.encode("ascii", "ignore")
                url = entry.a['href']
                results[url] = text 
                count += 1
            except:
                pass
    return results

queryStr = "Albert einstein"
pubs = searchScholar(queryStr, 10)
if len(pubs) == 0:
    print "No articles found"
else:   
    for pub in pubs.keys():
        print pub + ' ' + pubs[pub]

Однако я хочу запустить этот скрипт как приложение CGIна удаленном сервере, без доступа к консоли, поэтому я не могу установить какие-либо внешние модули Python.(Мне удалось «установить» BeautifulSoup, не прибегая к pip или easy_install, просто скопировав каталог bs4 в мой каталог cgi-bin, но этот трюк не работал с запросами из-за большого количества зависимостей.)

Итак, мой вопрос: возможно ли использовать встроенные модули Python urllib2 или httplib вместо запросов на получение страницы Google Scholar и затем передать ее в BeautifulSoup?Так и должно быть, потому что я нашел здесь код , который очищает Google Scholar, используя только стандартные библиотеки плюс BeautifulSoup, но он довольно запутанный.Я бы предпочел найти гораздо более простое решение, просто приспособив мой скрипт для использования стандартных библиотек вместо запросов.

Может ли кто-нибудь помочь мне?

1 Ответ

0 голосов
/ 30 января 2019

Этого кода достаточно для выполнения простого запроса, используя urllib2 :

def get(url):
    req = urllib2.Request(url)
    req.add_header('User-Agent', 'Mozilla/2.0 (compatible; MSIE 5.5; Windows NT)')
    return urllib2.urlopen(req).read()

, если в будущем вам понадобится что-то более продвинутое, это будет больше кода.То, что делает запрос, упрощает использование по сравнению со стандартными библиотеками.

...