抓取 wiki 中的第一段链接

Crawl the first paragraph link in wiki

提问人:joe 提问时间:1/14/2019 最后编辑:Daniel Haojoe 更新时间:12/13/2022 访问量:270

问:

如何抓取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
python-3.x beautifulsoup python-requests

评论

0赞 JoshuaCS 1/14/2019
我想我解决了你的问题。看看我的答案!

答:

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_abreak

输出(删除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,请让我知道这是否适合您。如果是这样,请将我的答案标记为已接受(绿色复选标记)并投赞成票。提前致谢