Python爬虫之遍历单个域名
在进行网站爬取时,我们希望只爬取某一个特定域名下的网页,而不影响其他域名的网页。本文将介绍如何使用Python进行单个域名的爬取。
步骤1:获取网页内容
首先,需要使用Python获取网站的内容,这可以通过urllib或requests库实现。下面是一个使用requests库获取网页内容的示例代码:
import requests
url = 'http://example.com'
response = requests.get(url)
html = response.text
步骤2:解析网页内容
获取网页内容后,需要从中解析出网页中所有的链接,进而获取其他网页的内容。这可以通过正则表达式或BeautifulSoup库实现。下面是一个使用BeautifulSoup库获取所有链接的示例代码:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
links = [link.get('href') for link in soup.find_all('a')]
步骤3:过滤链接
获取所有链接后,需要过滤掉那些不是目标域名下的链接。这可以通过urlparse库实现。下面是一个使用urlparse库过滤链接的示例代码:
from urllib.parse import urlparse
domain = 'example.com'
def is_same_domain(link):
parsed_link = urlparse(link)
return parsed_link.netloc == domain
filtered_links = list(filter(is_same_domain, links))
步骤4:递归获取网页内容
通过以上步骤,我们就可以获取目标站点下的所有链接。接下来,可以使用递归的方式获取所有链接下的内容。下面是一个使用递归方式获取所有链接的示例代码:
def get_all_links(url):
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
links = [link.get('href') for link in soup.find_all('a')]
filtered_links = list(filter(is_same_domain, links))
for link in filtered_links:
get_all_links(link)
get_all_links('http://example.com')
通过以上步骤,我们就可以使用Python爬虫遍历单个域名下的所有网页。如果要限制深度,可以在递归时增加一个参数,控制递归的深度。
示例1:获取GitHub上Python官方文档站点下的所有链接
以下是一个使用以上步骤获取GitHub上Python官方文档站点下所有链接的示例代码:
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse
domain = 'docs.python.org'
def is_same_domain(link):
parsed_link = urlparse(link)
return parsed_link.netloc == domain
def get_all_links(url):
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
links = [link.get('href') for link in soup.find_all('a')]
filtered_links = list(filter(is_same_domain, links))
for link in filtered_links:
print(link)
get_all_links(link)
get_all_links('https://docs.python.org/3/')
示例2:获取Google官方文档站点下的所有链接
以下是一个使用以上步骤获取Google官方文档站点下所有链接的示例代码:
import requests
from bs4 import BeautifulSoup
from urllib.parse import urlparse
domain = 'developers.google.com'
def is_same_domain(link):
parsed_link = urlparse(link)
return parsed_link.netloc == domain
def get_all_links(url):
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
links = [link.get('href') for link in soup.find_all('a')]
filtered_links = list(filter(is_same_domain, links))
for link in filtered_links:
print(link)
get_all_links(link)
get_all_links('https://developers.google.com/')
以上两个示例代码分别演示了如何使用以上步骤获取不同站点下的所有链接。根据实际需要,可以修改代码中的目标域名和起始URL,实现自己需要的爬虫功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python爬虫之遍历单个域名 - Python技术站