我正试图刮擦所有抗生素及其谱图。如果您先转到下面的链接,则会看到8个按钮。然后,如果您单击ANTIBACTERIAL-> CLINDAMYCIN,它将带您到下面的第二个链接,该链接包含一个需要抓取的“光谱”部分。
基本上,我必须对所有抗生素进行自动化操作,但我需要JSON格式,因此我可以在光谱及其对应的抗生素之间建立联系。但是正如您所看到的,光谱总是在不同的页面中。所有这些按钮也是动态的。有什么好的方法可以完成这项工作?我已经使用bs4,selenium编写了一些机器人程序,但是仍然遇到问题。我很难解决这个问题。
总而言之,理想情况下,我希望所有这些抗生素及其光谱以json格式组织并以它们在页面中的方式嵌套,以便我可以使用它们。如何将光谱与抗生素联系起来?
感谢您的帮助。
https://www.hopkinsguides.com/hopkins/index/Johns_Hopkins_ABX_Guide/Antibiotics
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()