搜寻Wiki中的第一段链接

时间:2019-01-13 16:44:53

标签: python-3.x

如何在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 个答案:

答案 0 :(得分:0)

从技术上来讲,这些链接与括号外的链接没有区别。如果您仔细查看这些链接的 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

希望对您有所帮助,否则,请让我知道发生了什么问题。