c爬虫抓取网页数据(和StudyTitile的元素包含title元素的titletitle网页爬取实验数据)
优采云 发布时间: 2021-12-25 21:03c爬虫抓取网页数据(和StudyTitile的元素包含title元素的titletitle网页爬取实验数据)
现在我们要从这个页面抓取实验数据
url = 'https://clinicaltrials.gov/ct2/results?age_v=&gndr=&type=&rslt=With&Search=Apply'
首先打开浏览器加载网址
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get(url) #浏览器加载网页url
sleep(3)
2. 获取网页中的网址
观察到只有 Status 和 Study Titile 列中的元素收录
title,因此我们尝试通过 title 元素从许多元素中过滤出这两列中的元素。 “有结果”中点击的内容就是我们想要的,所以我们要区分“状态”和“研究标题”下的内容,观察这两个元素的区别,发现“状态”下的URL收录
'/结果/',所以我们用这个来区分。
scr1 = driver.find_elements_by_xpath('//td/a[@title]') #找出表格中含有属性title的元素
scr2= [x.get_attribute('href') for x in scr1] #获取元素中的网址
n01 = []
for i01 in scr2:
if i01.find('/results/') != -1: 若网址中不包含'/results/',返回-1
n01.append(i01)
所以n01的列表就是第一页所有实验的实验结果网址。
3.向实验结果网站发起请求,获取http状态码
import requests
def qingqiu(url):
r = requests.get(url)
r.encoding = 'utf-8'
return r.text
4.获取所有实验的实验结果
import re
from bs4 import BeautifulSoup
nl = []
for i01 in n01:
a = qingqiu(i01)
bs01 =BeautifulSoup(a,'lxml')#使用BeautifulSoup解析代码
da = bs01.find_all('script')
for i in range(len(da)):
a.replace(str(da[i]),'')
bs01 =BeautifulSoup(a,'lxml')
n001=bs01.find_all('tr') #搜索当前tag的所有tag子节点,此处tag为tr
nr_list=[]
for i001 in range(len(n001)):
n02 = n001[i001].find_all(re.compile('th|td'))
n002=[x.text.replace('\n',' ').strip() for x in n02]
if len(n002)>1 and n002[0].strip():
# print('存入。。。。')
nr_list=nr_list+n002 #列表拼接
nl = nl+nr_list
这里的 nl 是 10 个实验的实验结果。
以后会详细介绍,请指正~