从不同的链接中提取数据并与相关联的D

2024-04-29 20:42:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力清除所有的抗生素和它们的光谱。如果你首先点击下面的链接,你会看到8个按钮。然后,如果单击抗菌->;克林霉素,然后它会带你到下面的第二个链接,其中包含一个“光谱”部分,需要刮

基本上,我必须对所有抗生素进行自动化,但我需要JSON格式的它,这样我就可以在光谱和相应的抗生素之间建立链接。但正如你所看到的,光谱总是在另一页上。所有这些按钮也是动态的。完成这件事有哪些好方法?我已经编写了一些使用bs4、selenium的机器人程序,但一直遇到问题。我很难对这件事保持清醒

总而言之,理想情况下,我希望所有这些抗生素及其谱都以json格式组织,并以页面中的方式嵌套,以便我可以使用它们。我怎样才能把抗生素的光谱联系起来呢

谢谢你的帮助

https://www.hopkinsguides.com/hopkins/index/Johns_Hopkins_ABX_Guide/Antibiotics

  1. https://www.hopkinsguides.com/hopkins/view/Johns_Hopkins_ABX_Guide/540131/all/Clindamycin
import requests
from bs4 import BeautifulSoup
import time

url = "https://www.hopkinsguides.com/hopkins/"
anti = "https://www.hopkinsguides.com/hopkins/index/Johns_Hopkins_ABX_Guide/Antibiotics"


def main():
    with requests.Session() as s:
        pr = s.post(url, data={'user': 'user', 'password': 'pass'})
        print("POST STATUS CODE: ", pr.status_code, "\n\n")
        time.sleep(5)

        return get_buttons(s)


buttons =[]
links = []
page_tracker = 0

def expand_page(s):
    print("in expand page")
    for page_tracker in buttons:
        txt = s.get(url + "index-ajax" + buttons[page_tracker])
        get_buttons(s, txt.text)
        time.sleep(randint(2, 5))
        print(links)


def get_links(s):
    #Get links  
    for i in soup.findAll("a", class_="flush"):
        #['./view/Johns_Hopkins_ABX_Guide/540016/all/Para_aminosalicylic_acid_[PAS]'    
        print("in get_links")
        if True:
            links.append(str(i.get("href")))
        else:
            print("it was false")
            expand_page(s)
    expand_page(s) 


def get_buttons(s, cont=None):
    global r, content, soup
    r = s.get(anti)
    content = r.text
    soup = BeautifulSoup(content, features="lxml")

    for i in soup.findAll("a"):
        if i.get('data-path') != None:
            buttons.append(str(i.get('data-path'))) #['Johns_Hopkins_ABX_Guide/Antibiotics/Antibacterial']
    return get_links(s)



main()

Tags: inhttpscomgetwwwpage光谱links