【问题标题】:Webscrape ISBN info from brazilian website从巴西网站抓取 ISBN 信息
【发布时间】:2020-04-08 05:09:32
【问题描述】:

我正在尝试获取一些带有漂亮汤的标签,以使用这些数据生成一个 bibtex 条目。

从浏览器访问 ISBN 巴西网站时,会显示有关该 ISBN 的信息。但是当我尝试使用 urlopen 和请求时,它给了我一个 HTTPError 代码 500。在浏览器中发生了这种情况,只能通过关闭选项卡并在另一个选项卡中打开相同的链接来解决。

网站要求提供验证码。我认为第一次搜索需要回答验证码,其他的,只需更改 url 中的 isbn 即可。

在此之后,当您点击“链接+isbn”时,它会显示有关该书的信息。我正在尝试使用这个“链接+isbn”来用美丽的汤进行网络抓取。

有效的链接:http://www.isbn.bn.br/website/consulta/cadastro/isbn/9788521208037 -- (首先在 'www.isbn. ... /cadastro' 中进行搜索,因为验证码)

我尝试了一些代码,现在我只是想获取网站的 html 而不会出现错误 500。

import sys
import urllib
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup

BRbase = 'http://www.isbn.bn.br/website/consulta/cadastro/isbn/'

Lista_ISBN = ['9788542209402',
              '9788542206937',
              '9788521208037']

for isbn in Lista_ISBN:
    page = BRbase + isbn
    url = Request(page, headers={'User-Agent': 'Mozilla/5.0'})
    html = urlopen(url).read()
    #code to beautiful soup
    try:
        #code to beautiful soup and generate bibtex
        print(page)
        print(html)
        
    except:
        print('ISBN {} não encontrado'.format(isbn))
sys.exit(1)

【问题讨论】:

    标签: beautifulsoup captcha http-error urlopen


    【解决方案1】:
    import requests
    from bs4 import BeautifulSoup
    
    headers = {"Cookie": 'JSESSIONID=60F8CDFBD408299B40C7E7C2459DC624'}
    
    isbn = ['9788542209402', '9788542206937', '9788521208037']
    
    for item in isbn:
        print(f"{'*'*20}Extracting ISBN# {item}{'*'*20}")
        r = requests.get(
            f"http://www.isbn.bn.br/website/consulta/cadastro/isbn/{item}", headers=headers)
        soup = BeautifulSoup(r.text, 'html.parser')
        for item in soup.findAll('strong')[2:10]:
            print(item.parent.get_text(strip=True))
    

    输出:

    ********************Extracting ISBN# 9788542209402********************
    ISBN978-85-422-0940-2
    TítuloSPQR
    Edição1
    Ano Edição2017
    Tipo de SuportePapel
    Páginas448
    Editor(a)Planeta
    ParticipaçõesMary Beard ( Autor)Luiz Gil Reyes (Tradutor)
    ********************Extracting ISBN# 9788542206937********************
    ISBN978-85-422-0693-7
    TítuloEm nome de Roma
    Edição1
    Ano Edição2016
    Tipo de SuportePapel
    Páginas560
    Editor(a)Planeta
    ParticipaçõesAdrian Goldsworthy ( Autor)Claudio Blanc (Tradutor)
    ********************Extracting ISBN# 9788521208037********************
    ISBN978-85-212-0803-7
    TítuloCurso de física básica: ótica, relatividade e física quântica
    Edição2
    Ano Edição2014
    Tipo de SuportePapel
    Páginas0
    Editor(a)Blucher
    ParticipaçõesH. Moysés Nussenzveig ( Autor)
    

    【讨论】:

    • 对我来说,输出只是 ***Extracting ISB#... ***。我想是那个 jsessionid。
    • @JeanPimenta 你需要解决一次验证码。然后通过JSESSIONID 在它处于活动状态时能够抓取。
    • 我明白了,但是如何获取这个jsessionid呢?我解决了验证码以及如何访问此信息?
    • @JeanPimenta 你运行 repl.it 了吗?
    • 是的...效果很好。但我怎么能得到这个?我有一个在其他 api 中看起来 ISBN 和 DOI 代码的 python 代码。但是一些 ISBN,例如来自巴西的那些,没有出现在这些数据库中。他们出现在这个网站上。我的想法是将这个网站上的搜索合并到 python 代码中......但我不知道我如何获得 jsessionid 的值。
    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多