从不同的链接中收集数据并关联数据

时间:2019-06-05 23:36:30

标签: python web-scraping

我正试图刮擦所有抗生素及其谱图。如果您先转到下面的链接,则会看到8个按钮。然后,如果您单击ANTIBACTERIAL-> CLINDAMYCIN,它将带您到下面的第二个链接,该链接包含一个需要抓取的“光谱”部分。

基本上,我必须对所有抗生素进行自动化操作,但我需要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()

0 个答案:

没有答案