我正在尝试解析网页并使用python创建站点地图。我写了下面的代码 -
import urllib2
from bs4 import BeautifulSoup
mypage = "http://example.com/"
page = urllib2.urlopen(mypage)
soup = BeautifulSoup(page,'html.parser')
all_links = soup.find_all('a')
for link in all_links:
print link.get('href')
以上代码打印example.com
(外部和内部)中的所有链接。
"example.com"
已链接到"example.com/page1"
,其链接指向"example.com/page3"
。为这种流程创建地图的理想方法是什么?我正在寻找一个显示"example.com" -> "example.com/page1" -> "example.com/page3"
或类似内容的库或逻辑答案 0 :(得分:2)
对于第一个问题,您可以使用urlparse来解析主机名并检查域名。不要使用手动正则表达式来做到这一点,使用像这样的核心库会更容易。参见:
from urllib.parse import urlparse
parsed = urlparse(url)
hostname = parsed.hostname`
对于您的第二个问题,您的数据结构看起来像图表不是吗?您可以使用自定义图形数据结构,其中包含节点和链接。或者您可以使用为此目的而制作的图形数据库。尽管如此,这两种解决方案都将非常复杂。我认为最好只使用字典数据类型,其中key是页面的URL,value是该页面中的链接列表。在这种情况下,您无法像在图表中那样轻松地关注链接,但它仍然可以解决问题。您还可以保留另一组数据类型,以跟踪您访问过的链接。
答案 1 :(得分:0)
我已经编写了一段代码,用于在python烧瓶框架中生成sitemap.xml文件
import xml.etree.cElementTree as ET
import datetime
def registerSiteMaps():
root = ET.Element('urlset')
root.attrib['xmlns:xsi']="http://www.w3.org/2001/XMLSchema-instance"
root.attrib['xsi:schemaLocation']="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
root.attrib['xmlns']="http://www.sitemaps.org/schemas/sitemap/0.9"
q = db.result
for doc in q.results:
uid = doc['uid']
site_root = uid.replace('__', '/').replace('_', '-')
dt = datetime.datetime.now().strftime ("%Y-%m-%d")
doc = ET.SubElement(root, "url")
ET.SubElement(doc, "loc").text = "https://www.example.com/"+site_root
ET.SubElement(doc, "lastmod").text = dt
ET.SubElement(doc, "changefreq").text = "weekly"
ET.SubElement(doc, "priority").text = "1.0"
tree = ET.ElementTree(root)
tree.write('sitemap.xml', encoding='utf-8', xml_declaration=True)
有关更多详细信息,请遵循此link