我正在处理需要我获取网页上所有网址的内容。它似乎适用于我测试过的大多数网站,例如microsoft.com,但它只从google.com返回三个。以下是相关的源代码:
import urllib
import time
import re
fwcURL = "http://www.microsoft.com" #URL to read
mylines = urllib.urlopen(fwcURL).readlines()
print "Found URLs:"
time.sleep(1) #Pause execution for a bit
for item in mylines:
if "http://" in item.lower(): #For http
print item[item.index("http://"):].split("'")[0].split('"')[0] # Remove ' and " from the end, for example in href=
if "https://" in item.lower(): #For https
print item[item.index("https://"):].split("'")[0].split('"')[0] # Ditto
如果我的代码可以改进,或者有更好的方法可以做到这一点,请回复。提前谢谢!
答案 0 :(得分:3)
尝试使用Mechanize或BeautifulSoup或lxml。
通过使用BeautifulSoup,您可以轻松轻松获取所有html / xml内容。
import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen("some_url")
soup = BeautifulSoup(page.read())
links = soup.findAll("a")
for link in links:
print link["href"]
BeautifulSoup
非常容易学习和理解。
答案 1 :(得分:2)
首先,HTML不是常规语言,并且没有像这样的简单字符串操作可以在所有页面上运行。你需要一个真正的HTML解析器。我推荐Lxml。然后,只需通过树递归并找到所需的元素即可。
其次,某些页面可能是动态的,因此您无法找到html源代码中的所有内容。 Google大量使用javascript和AJAX(注意它如何在不重新加载页面的情况下显示结果)。
答案 2 :(得分:2)
我会使用lxml并执行:
import lxml.html
page = lxml.html.parse('http://www.microsoft.com').getroot()
anchors = page.findall('a')
值得注意的是,如果链接是动态生成的(通过JS或类似方式),那么您将无法以某种方式实现浏览器的自动化。