Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用beautifulsoup4后如何区分刮擦效果?_Python_Python 3.x_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 使用beautifulsoup4后如何区分刮擦效果?

Python 使用beautifulsoup4后如何区分刮擦效果?,python,python-3.x,web-scraping,beautifulsoup,Python,Python 3.x,Web Scraping,Beautifulsoup,我正试图从NJR获取数据 我正处于获取正确值的阶段,但是,在获取各自组中的值时遇到了困难 如果您打开上面的链接,然后单击“12个月实践档案”下拉列表,您可以看到不同的“操作类型”。我希望每一行都是它的特定组 到目前为止,我的代码将收集所有信息,但它没有被划分为特定的组。事实上,在试图更多地理解我的代码时,它只是拉取中间可能不够具体的所有字符串 要么我拉错了数据,要么我需要找出一种方法将结果分成适当的组 import requests from bs4 import BeautifulSoup r

我正试图从NJR获取数据

我正处于获取正确值的阶段,但是,在获取各自组中的值时遇到了困难

如果您打开上面的链接,然后单击“12个月实践档案”下拉列表,您可以看到不同的“操作类型”。我希望每一行都是它的特定组

到目前为止,我的代码将收集所有信息,但它没有被划分为特定的组。事实上,在试图更多地理解我的代码时,它只是拉取中间可能不够具体的所有字符串

要么我拉错了数据,要么我需要找出一种方法将结果分成适当的组

import requests
from bs4 import BeautifulSoup
r=requests.get("http://www.njrsurgeonhospitalprofile.org.uk/HospitalProfile?hospitalName=Abergele%20Hospital")
c=r.content

soup=BeautifulSoup(c,"html.parser")
all=soup.find_all(["div"],{"class":"toggle_container"})[1]
print(all)
到目前为止,我能够解析出包含所有必要数据的适当HTML代码。接下来,我迭代所有“td”对象

结果:

Hip Primary
-
208
220
Hip Revision
-
Fewer Than 5
25
Knee Primary
Patello-Femoral Replacement
Fewer Than 5
4
Knee Primary
Total knee replacement
211
230
Knee Primary
Unicondylar Knee Replacement
20
26
Knee Revision
-
5
16
Shoulder Primary
-
15
16
       Total

459+
537
done

事实上,我不想要全国平均水平或总排数。但我可以在以后找到答案。

这可能不是解决您问题的最有效的方法,但您可以创建一个空列表(即
所有行
),其中将包含长度为4项的列表

temp = list()
all_rows = list()
for item in all.find_all('td'):
    temp.append(item.text)
    i += 1
    if i % 4 == 0:
        all_rows.append(temp)
        temp = []
其输出为:

[
  ['Hip Primary', '-', '208', '220'],
  ['Hip Revision', '-', 'Fewer Than 5', '25'],
  ['Knee Primary', 'Patello-Femoral Replacement', 'Fewer Than 5', '4'],
  ['Knee Primary', 'Total knee replacement', '211', '230'],
  ['Knee Primary', 'Unicondylar Knee Replacement', '20', '26'],
  ['Knee Revision', '-', '5', '16'],
  ['Shoulder Primary', '-', '15', '16'],
  ['\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0Total', '', '459+', '537']
]
{
 'Hip Primary': ['-', '208', '220'],
 'Hip Revision': ['-', 'Fewer Than 5', '25'],
 'Knee Primary': ['Unicondylar Knee Replacement', '20', '26'],
 'Knee Revision': ['-', '5', '16'],
 'Shoulder Primary': ['-', '15', '16'],
 '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0Total': ['', '459+', '537']
}
然后,您可以将所有这些内容存储在字典中,其中键是索引0,值是列表中其余3项的列表。像这样:

all_rows_dict = dict()
for l in all_rows:
    all_rows_dict[l[0]] = l[1::]
这将产生以下输出:

[
  ['Hip Primary', '-', '208', '220'],
  ['Hip Revision', '-', 'Fewer Than 5', '25'],
  ['Knee Primary', 'Patello-Femoral Replacement', 'Fewer Than 5', '4'],
  ['Knee Primary', 'Total knee replacement', '211', '230'],
  ['Knee Primary', 'Unicondylar Knee Replacement', '20', '26'],
  ['Knee Revision', '-', '5', '16'],
  ['Shoulder Primary', '-', '15', '16'],
  ['\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0Total', '', '459+', '537']
]
{
 'Hip Primary': ['-', '208', '220'],
 'Hip Revision': ['-', 'Fewer Than 5', '25'],
 'Knee Primary': ['Unicondylar Knee Replacement', '20', '26'],
 'Knee Revision': ['-', '5', '16'],
 'Shoulder Primary': ['-', '15', '16'],
 '\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0\xa0Total': ['', '459+', '537']
}
然后,要删除所有这些不间断的空格,您可以创建一个干净的字典,如下所示:

clean_dict = {key.replace(u'\xa0', u''): value for key, value in all_rows_dict.items()}
最终输出为:

{
 'Hip Primary': ['-', '208', '220'],
 'Hip Revision': ['-', 'Fewer Than 5', '25'],
 'Knee Primary': ['Unicondylar Knee Replacement', '20', '26'],
 'Knee Revision': ['-', '5', '16'],
 'Shoulder Primary': ['-', '15', '16'],
 'Total': ['', '459+', '537']
}

你想把他们组合在一起是什么意思?输出是否已经正常?我正在尝试创建一个数据集,其中结果的前4行等于数据集上的1行。操作类型|操作子类别|记录的程序|平均\n Hip Primary |-| 208 | 220您可以先将表头作为键的值压缩到字典中吗?这样就完成了工作。我曾考虑调整代码以获取数据,但这也是一样的。谢谢