我的问题不应该太难回答,我遇到的问题是我不确定如何抓取网站上的特定关键字..我对Python很陌生..所以我知道我需要添加更多细节,首先我不想做的是使用 Beautiful Soup 或任何这些库,我使用 lxml 和请求,我想做的是要求用户输入网站的信息,一旦提供,就向提供的 URL,一旦发出请求,我希望它获取所有我相信我使用 html.fromstring(site.content) 完成的 html,所以所有这些都已完成,我遇到的问题是我希望它找到任何链接或文本结尾的“.swf”并将其打印在下面..有人知道这样做的方法吗?
def ScrapeSwf():
flashSite = raw_input('Please Provide Web URL : ')
print 'Sending Requests...'
flashReq = requests.get(flashSite)
print 'Scraping...'
flashTree = html.fromstring(flashReq.content)
print ' Now i want to search the html for the swf link in the html'
print ' And Display them using print probablly with a while condition'
类似的事情..非常感谢任何帮助
您正在使用
lxhtml
将 HTML 构建到对象模型中,因此您可能希望使用 flashTree.xpath
使用 XML 路径语言搜索 DOM。在源 DOM 中找到您想要的路径,然后编写一个提取它的 xpath,您的 Web 浏览器的开发人员工具和 w3schools 可以帮助您。
我个人不会打扰,我只是使用正则表达式(
re.find(pattern, flashReq.content)
)提取我需要的文本,因为它更快。如果我不了解正则表达式,对它们不满意,或者我想要原始速度,那么我会使用粗略的字符串提取,如下所示:
start = flashReq.content.find(text_before_it) + len(text_before_it)
end = flashReq.content.find(text_after_it, start)
text_you_want = flashReq.content[start:end]
这是我的尝试:
import requests [1]
response = requests.get(flashSite) [2]
myPage = response.content [3]
for line in myPage.splitlines(): [4]
if '.swf' in line: [5]
start = line.find('http') [6]
end = line.find('.swf') + 4 [7]
print line[start:end] [8]
说明:
1:导入请求模块。我无法真正找到一种方法来从 lxml 中获取我需要的东西,所以我只是坚持这样做。
2:将 HTTP GET 方法发送到任何具有 Flash 文件的站点
3:将其内容保存到变量中
是的,我意识到你可以压缩第 2 行和第 3 行,我只是这样做,因为我觉得这对我来说更有意义。
4:现在逐行迭代代码中的每一行。
5:检查“.swf”是否在该行中
第 6 行到第 8 行演示了 @GazDavidson 在他的答案中提到的字符串切片方法。我在第 7 行添加 4 的原因是因为“.swf”有 4 个字符长。
您应该能够(大致)获得提供 SWF 文件链接的结果。