Python:网页抓取特定关键字

问题描述 投票:0回答:2

我的问题不应该太难回答,我遇到的问题是我不确定如何抓取网站上的特定关键字..我对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'

类似的事情..非常感谢任何帮助

python web-scraping web-crawler
2个回答
1
投票

您正在使用

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]

0
投票

这是我的尝试:

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 文件链接的结果。

© www.soinside.com 2019 - 2024. All rights reserved.