有什么方便的方法来获取页面中子节的索引?

时间:2019-05-26 12:16:26

标签: python url web-scraping

使用“ index-x”在页面的子部分快速定位很方便。

例如

https://docs.python.org/3/library/re.html#index-2

在此page中给出了第三小节。

当我想与他人共享子节的位置时,如何以一种便捷的方式获取索引?

例如,如何获取{m,n}子节的索引而不从index-0开始计数?

enter image description here

2 个答案:

答案 0 :(得分:1)

在bs4 4.7.1中,您可以使用:has:contains来指定特定的文本字符串并返回索引(请注意,使用select_one将返回第一个匹配项。请使用列表理解和select(如果要返回所有匹配项)

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://docs.python.org/3/library/re.html')
soup = bs(r.content, 'lxml')
index = soup.select_one('dl:has(.pre:contains("{m,n}"))')['id']
print(index)

任何版本:如果您想要一个将特殊字符映射到索引的字典。感谢@zoe在我的字典理解中发现错误。

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://docs.python.org/3/library/re.html')
soup = bs(r.content, 'lxml')
mappings = dict([(item['id'], [i.text for i in item.select('dt .pre')]) for item in soup.select('[id^="index-"]')])
indices = {i: k for (k, v) in mappings.items() for i in v}

答案 1 :(得分:0)

您正在寻找 <input className="form-control" onKeyDown={(e) => this.editDueDatekeypress(e, keyName, dueDateObject)} onChange={this.onChangeEditDueDate} value={this.state.editDueDateText} defaultValue={dueDateObject.dueDate} type="text" placeholder="By 28th May, I will have" /> <div className="input-group-append"> <button className="btn btn-outline-primary" type="button" onClick={(e) => this.editDueDate(e, keyName, dueDateObject)}>Submit</button> </div>

您可以下载页面的HTML,并使用以下代码获取index-7的所有可能值:

index-something

输出:

import re
import requests
from bs4 import BeautifulSoup

r = requests.get('https://docs.python.org/3/library/re.html')
soup = BeautifulSoup(r.content.decode())

result = [t['id'] for t in soup.find_all(id=re.compile('index-\d+'))]

print(result)

列表理解中的['index-0', 'index-1', 'index-2', 'index-3', 'index-4', 'index-5', 'index-6', 'index-7', 'index-8', 'index-9', 'index-10', 'index-11', 'index-12', 'index-13', 'index-14', 'index-15', 'index-16', 'index-17', 'index-18', 'index-19', 'index-20', 'index-21', 'index-22', 'index-23', 'index-24', 'index-25', 'index-26', 'index-27', 'index-28', 'index-29', 'index-30', 'index-31', 'index-32', 'index-33', 'index-34', 'index-35', 'index-36', 'index-37', 'index-38'] 对象包含t与正则表达式匹配的标记的HTML。