从维基百科抓取链接
scraping links from wikipedia
所以我正在尝试从随机维基百科页面中抓取 links 这是我到目前为止的代码:
from bs4 import BeautifulSoup
import requests
import pandas as pd
import urllib2
# function get random page
def get_random():
import requests
# r = requests.get('https://en.wikipedia.org/wiki/Special:Random')
r = requests.get('https://en.wikipedia.org/wiki/Carole_Ann')
return r.url
#========================
#finding the valid link
def validlink(href):
if href:
if re.compile('^/wiki/').search(href):
if not re.compile('/\w+:').search(href):
return True
return False
#validlink()===========
#the first site
a1 = get_random()
#print("the first site is: " + a1)
# the first site end()====
#looking for the article name:
blin = requests.get(a1)
soup = BeautifulSoup(blin.text, 'html.parser')
title = soup.find('h1', {'class' : 'firstHeading'})
print("starting website: " + a1 + " Titled: " + title.text)
print("")
#=============================
#first article done
#find body:
import re
body = requests.get(a1).text
soup = BeautifulSoup(body, 'lxml')
for link in soup.findAll("a"):
url = link.get("href", "")
print(
#======================
我知道我在最后一部分做错了。我是 python 的新手,所以我不知道如何处理这部分,我需要的是从随机页面将我带到的随机站点中提取所有 link,然后我将 link 和标题从该网站上拉下来,
然后我需要将维基百科 links 从那个页面中拉出来,这就是我在最后一段代码中想要做的还有另一个片段:
此时我想打印所有 links,它在根据我在顶部的有效 links 函数进行测试后发现:
再次见谅,我是新手,不懂。但是请帮助我解决这个问题。
所以我的问题是:我需要创建一段代码,将所有网站 link 从维基百科页面中提取出来(注意我仍然不知道该怎么做for 循环是我根据自己的研究得出的最佳猜测)然后我需要测试我根据有效 link 函数提取的 links,并打印出所有有效的 link s.
如果您希望将其作为列表,则创建新列表并且 append()
url 如果它有效。
因为同一个 url 可以在页面上出现多次,所以我还要检查 url 是否已经在列表中。
valid_urls = []
for link in soup.find_all('a'): # find_all('a', {'href': True}):
url = link.get('href', '')
if url not in valid_urls and validlink(url):
valid_urls.append(url)
print(valid_urls)
from bs4 import BeautifulSoup
import requests
import re
# --- functions ---
def is_valid(url):
"""finding the valid link"""
if url:
if url.startswith('/wiki/'): # you don't need `re` to check it
if not re.compile('/\w+:').search(url):
return True
return False
# --- main ---
#random_url = 'https://en.wikipedia.org/wiki/Special:Random'
random_url = 'https://en.wikipedia.org/wiki/Carole_Ann'
r = requests.get(random_url)
print('url:', r.url)
soup = BeautifulSoup(r.text, 'html.parser')
title = soup.find('h1', {'class': 'firstHeading'})
print('starting website:', r.url)
print('titled:', title.text)
print()
valid_urls = []
for link in soup.find_all('a'): # find_all('a', {'href': True}):
url = link.get('href', '')
if url not in valid_urls and is_valid(url):
valid_urls.append(url)
#print(valid_urls)
#for url in valid_urls:
# print(url)
print('\n'.join(valid_urls))
所以我正在尝试从随机维基百科页面中抓取 links 这是我到目前为止的代码:
from bs4 import BeautifulSoup
import requests
import pandas as pd
import urllib2
# function get random page
def get_random():
import requests
# r = requests.get('https://en.wikipedia.org/wiki/Special:Random')
r = requests.get('https://en.wikipedia.org/wiki/Carole_Ann')
return r.url
#========================
#finding the valid link
def validlink(href):
if href:
if re.compile('^/wiki/').search(href):
if not re.compile('/\w+:').search(href):
return True
return False
#validlink()===========
#the first site
a1 = get_random()
#print("the first site is: " + a1)
# the first site end()====
#looking for the article name:
blin = requests.get(a1)
soup = BeautifulSoup(blin.text, 'html.parser')
title = soup.find('h1', {'class' : 'firstHeading'})
print("starting website: " + a1 + " Titled: " + title.text)
print("")
#=============================
#first article done
#find body:
import re
body = requests.get(a1).text
soup = BeautifulSoup(body, 'lxml')
for link in soup.findAll("a"):
url = link.get("href", "")
print(
#======================
我知道我在最后一部分做错了。我是 python 的新手,所以我不知道如何处理这部分,我需要的是从随机页面将我带到的随机站点中提取所有 link,然后我将 link 和标题从该网站上拉下来, 然后我需要将维基百科 links 从那个页面中拉出来,这就是我在最后一段代码中想要做的还有另一个片段:
此时我想打印所有 links,它在根据我在顶部的有效 links 函数进行测试后发现:
再次见谅,我是新手,不懂。但是请帮助我解决这个问题。
所以我的问题是:我需要创建一段代码,将所有网站 link 从维基百科页面中提取出来(注意我仍然不知道该怎么做for 循环是我根据自己的研究得出的最佳猜测)然后我需要测试我根据有效 link 函数提取的 links,并打印出所有有效的 link s.
如果您希望将其作为列表,则创建新列表并且 append()
url 如果它有效。
因为同一个 url 可以在页面上出现多次,所以我还要检查 url 是否已经在列表中。
valid_urls = []
for link in soup.find_all('a'): # find_all('a', {'href': True}):
url = link.get('href', '')
if url not in valid_urls and validlink(url):
valid_urls.append(url)
print(valid_urls)
from bs4 import BeautifulSoup
import requests
import re
# --- functions ---
def is_valid(url):
"""finding the valid link"""
if url:
if url.startswith('/wiki/'): # you don't need `re` to check it
if not re.compile('/\w+:').search(url):
return True
return False
# --- main ---
#random_url = 'https://en.wikipedia.org/wiki/Special:Random'
random_url = 'https://en.wikipedia.org/wiki/Carole_Ann'
r = requests.get(random_url)
print('url:', r.url)
soup = BeautifulSoup(r.text, 'html.parser')
title = soup.find('h1', {'class': 'firstHeading'})
print('starting website:', r.url)
print('titled:', title.text)
print()
valid_urls = []
for link in soup.find_all('a'): # find_all('a', {'href': True}):
url = link.get('href', '')
if url not in valid_urls and is_valid(url):
valid_urls.append(url)
#print(valid_urls)
#for url in valid_urls:
# print(url)
print('\n'.join(valid_urls))