提问人:joe 提问时间:1/14/2019 最后编辑:Daniel Haojoe 更新时间:12/13/2022 访问量:270
抓取 wiki 中的第一段链接
Crawl the first paragraph link in wiki
问:
如何抓取wiki中的第一段链接?
括号中的所有链接都应排除在外。例如,我提供以下链接:
https://en.wikipedia.org/wiki/Data。
在这个页面上,我想抓取的第一个链接是“定性”(href=“/wiki/Qualitative_property”)。我的代码排除了所有特殊链接,如脚注和发音,但不能排除括号中的正常链接。
import requests
from bs4 import BeautifulSoup
response = requests.get('https://en.wikipedia.org/wiki/Data')
html = response.text
soup = BeautifulSoup(html, "html.parser")
link = soup.find(id='mw-content-text').find(class_="mw-parser-output").find_all('p', recursive=False)
list_a = []
for element in link:
if element.find("a", recursive=False):
print(element.find("a", recursive=False).get('href'))
break
答:
1赞
JoshuaCS
1/14/2019
#1
好吧,从技术上讲,这些链接与括号外的链接没有什么不同。如果你仔细观察这些链接的 href 属性,它们都以 /wiki/Help 开头:所以,如果发生这种情况,你可以省略它们。在下面的代码中,我使用了正则表达式来做到这一点:
法典
import re
import requests
from bs4 import BeautifulSoup
response = requests.get('https://en.wikipedia.org/wiki/Data')
html = response.text
soup = BeautifulSoup(html, "html.parser")
paragraphs = soup.find(id='mw-content-text').find(class_="mw-parser-output").find_all('p', recursive=False)
list_a = []
# Help links RegEx
help_link_regex = re.compile('^/wiki/Help:')
for p in paragraphs:
p_links = p.find_all("a", recursive=False)
for link in p_links:
# Leave them out if they match the previous RegEx
if not help_link_regex.match(link.get('href')):
print(link.get('href'))
list_a.append(link.get('href'))
break
输出
/wiki/Qualitative_property
/wiki/Information
/wiki/Measurement
/wiki/Data_(word)
/wiki/Information
/wiki/Knowledge
/wiki/Sign
/wiki/Marketing
/wiki/Analog_computer
/wiki/Johanna_Drucker
请注意,此列表中的第一个链接是第一段中的第一个链接(括号外):您想要的链接。
前面的代码只是将每个段落的第一个非帮助链接添加到 ,如果您想全部获取它们,只需删除:list_a
break
输出(删除break
)
/wiki/Qualitative_property
/wiki/Quantitative_data
/wiki/Variable_(research)
/wiki/Information
/wiki/Scientific_research
/wiki/Stock_price
/wiki/Crime_rate
/wiki/Unemployment_rate
/wiki/Literacy
/wiki/Homelessness
/wiki/Measurement
/wiki/Data_reporting
/wiki/Data_analysis
/wiki/Data_visualization
/wiki/Concept
/wiki/Information
/wiki/Knowledge
/wiki/Data_processing
/wiki/Number
/wiki/Character_(computing)
/wiki/Outlier
/wiki/Field_work
/wiki/In_situ
/wiki/Experimental_data
/wiki/Petroleum
/wiki/Digital_economy
/wiki/Data_(word)
/wiki/Mass_noun
/wiki/Information
/wiki/Knowledge
/wiki/Wisdom
/wiki/Shannon_entropy
/wiki/Knowledge
/wiki/Mount_Everest
/wiki/Altimeter
/wiki/Sign
/wiki/Marketing
/wiki/Social_services
/wiki/Truth
/wiki/Analog_computer
/wiki/Computer
/wiki/Alphabet
/wiki/Computer_program
/wiki/Lisp_(programming_language)
/wiki/Metadata
/wiki/Johanna_Drucker
我希望这对您有所帮助,否则,请让我知道出了什么问题。
评论
0赞
JoshuaCS
1/14/2019
@joe,请让我知道这是否适合您。如果是这样,请将我的答案标记为已接受(绿色复选标记)并投赞成票。提前致谢
评论