如何进行网页抓取<;p>;内部标签<;部门>;使用Python的HTML中具有class/id的标记

如何进行网页抓取<;p>;内部标签<;部门>;使用Python的HTML中具有class/id的标记,python,html,beautifulsoup,Python,Html,Beautifulsoup,我想提取以下数据: 发布日期:2016年6月16日 漏洞标识符:APSB16-23 优先事项:3 CVE编号:CVE-2016-4126 从 守则: import requests from bs4 import BeautifulSoup as bs from pprint import pprint r = requests.get('https://helpx.adobe.com/cy_en/security/products/air/apsb16-31.html') soup

我想提取以下数据:

发布日期:2016年6月16日 漏洞标识符:APSB16-23 优先事项:3 CVE编号:CVE-2016-4126

守则:

import requests
from bs4 import BeautifulSoup as bs
from pprint import pprint
    
r = requests.get('https://helpx.adobe.com/cy_en/security/products/air/apsb16-31.html')
soup = bs(r.content, 'html.parser')
pprint([i.text for i in soup.select('div > .text >  p' , limit = 4 )] )
输出:

['Release date:\xa0September 13, 2016',
 'Vulnerability identifier: APSB16-31',
 'Priority: 3',
 'CVE number:\xa0CVE-2016-6936']

问题在于存在/xa0。我应该如何删除它?如果还有比这更有效的代码呢?我还想把它转换成CSV文件。谢谢。

\xa0
实际上是拉丁语中的不间断空格(ISO 8859-1),也是chr(160)。你应该用空格代替它

试试这个:

import requests
from bs4 import BeautifulSoup as bs
from pprint import pprint

r = requests.get('https://helpx.adobe.com/cy_en/security/products/air/apsb16-31.html')
soup = bs(r.content, 'html.parser')
pprint([i.text.replace(u'\xa0', u' ') for i in soup.select('div > .text >  p', limit=4)])
输出:

['Release date: September 13, 2016',
 'Vulnerability identifier: APSB16-31',
 'Priority: 3',
 'CVE number: CVE-2016-6936']
编辑:要将结果放入
.csv
文件,请使用
pandas

以下是方法:

import pandas as pd
import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://helpx.adobe.com/cy_en/security/products/air/apsb16-31.html')
soup = bs(r.content, 'html.parser')
release = [
    i.getText().replace(u'\xa0', u' ').split(": ") for i
    in soup.select('div > .text >  p', limit=4)
]
pd.DataFrame(release).set_index(0).T.to_csv("release_data.csv", index=False)
输出:

['Release date: September 13, 2016',
 'Vulnerability identifier: APSB16-31',
 'Priority: 3',
 'CVE number: CVE-2016-6936']

\xa0
实际上是拉丁文1(ISO 8859-1)中的不间断空格,也是chr(160)。你应该用空格代替它

试试这个:

import requests
from bs4 import BeautifulSoup as bs
from pprint import pprint

r = requests.get('https://helpx.adobe.com/cy_en/security/products/air/apsb16-31.html')
soup = bs(r.content, 'html.parser')
pprint([i.text.replace(u'\xa0', u' ') for i in soup.select('div > .text >  p', limit=4)])
输出:

['Release date: September 13, 2016',
 'Vulnerability identifier: APSB16-31',
 'Priority: 3',
 'CVE number: CVE-2016-6936']
编辑:要将结果放入
.csv
文件,请使用
pandas

以下是方法:

import pandas as pd
import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://helpx.adobe.com/cy_en/security/products/air/apsb16-31.html')
soup = bs(r.content, 'html.parser')
release = [
    i.getText().replace(u'\xa0', u' ').split(": ") for i
    in soup.select('div > .text >  p', limit=4)
]
pd.DataFrame(release).set_index(0).T.to_csv("release_data.csv", index=False)
输出:

['Release date: September 13, 2016',
 'Vulnerability identifier: APSB16-31',
 'Priority: 3',
 'CVE number: CVE-2016-6936']

我刚刚使用了您的代码,并在提取的HTML标记上添加了for循环。似乎在使用列表理解时,unicode转换器不存在。不过这只是一个假设

至于剧本,我只是临时编了你的

import requests
from bs4 import BeautifulSoup
from pprint import pprint

url = "https://helpx.adobe.com/cy_en/security/products/air/apsb16-31.html"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
data = [i for i in soup.select('div > .text >  p', limit=4)]

for i in data:
    print(i.text)
    print("-"*20)
这将为您提供所需的输出。查看图像的链接,因为它不会在此处显示图像本身。

我刚刚使用了您的代码,并在提取的HTML标记上添加了for循环。似乎在使用列表理解时,unicode转换器不存在。不过这只是一个假设

至于剧本,我只是临时编了你的

import requests
from bs4 import BeautifulSoup
from pprint import pprint

url = "https://helpx.adobe.com/cy_en/security/products/air/apsb16-31.html"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
data = [i for i in soup.select('div > .text >  p', limit=4)]

for i in data:
    print(i.text)
    print("-"*20)
这将为您提供所需的输出。查看图像的链接,因为它不会在此处显示图像本身。

简单的更换即可<代码>[i.text.replace(“\xa0”,”)表示汤中的i。选择('div>.text>p',limit=4)]简单的替换即可<代码>[i.text.替换汤中的i(“\xa0”,”)。选择('div>.text>p',limit=4)]太棒了!非常感谢,这个答案完全解决了我的问题。太好了!非常感谢,这个答案完全解决了我的问题。