抓取ajax动态网页java(通过Python抓取深层网络数据库,一次性搜索20个名称)
优采云 发布时间: 2022-03-22 01:37抓取ajax动态网页java(通过Python抓取深层网络数据库,一次性搜索20个名称)
深层网络收录法庭记录、人口普查数据,可能还有旧报纸的档案。它主要是一个高度权威的学术数据库和政府档案。深度网络比表层网络更容易和更快地审计资源,但深度网络无法看穿表层网络。通过下面的冰山图,我们可以很清楚地知道表层网、深层网和暗网之间的层级关系。
通过Python爬取深度网络数据库,我们可以一次搜索多个数据库,比在每个网站上一次搜索一个要方便快捷得多,并且可以同时对数据库进行多个搜索,即一次搜索一个名称 20 次。
开放网络数据是指任何人都可以使用、重用和重新分配的一类数据,包括地理位置数据、交通数据和文化数据。
新闻服务 NPR 的 网站 是开放网络数据库的一个例子。如果您想要所有提及“互联网”一词的 NPR 文章,您可以从 网站 内部或 google 网站 搜外(通过谷歌搜索 "" 和 "internet" )。任何一种方法都可以获得关于 关键词 的 文章 列表。
图片来源:图片网可作为商业图片
相比之下,迈阿密-戴德县财产记录数据库是深度网络的一部分,简单的 关键词 搜索不会产生太多信息。假设你想获取迈阿密戴德县一个名叫“史密斯”的人的财产记录,你会怎么做?
直接在 Google 搜索“迈阿密戴德县史密斯房产记录”只会返回迈阿密戴德县房产查询网站。但是如果你想抓取一个开放的网络数据库,它是相对简单的。
比如你想爬取NPR提到“互联网”的文章,可以先使用网站的搜索功能,在搜索框中输入“互联网”,然后用关键词 结果页面。
我们也可以编写一个python脚本来爬取上述URL处的页面。这揭示了 网站 的搜索 URL 格式。输入搜索功能的关键字将出现在新网址的“search?query=”部分之后。
URL 可以通过分析 POST 请求中的请求体得到。点击F12键或右键“检查”查看网络的基本信息(进入后需要刷新页面)。
有关 F12/check 元素的更多信息,您可以点击下面的图片链接阅读文章“探索 Google Chrome 的神秘用法,F12!” 》
同样,如果你想搜索这个网站的其他信息,只需将上面URL中“=”后面的关键词替换为新的目标关键词即可。
如何使用 python 抓取深层网络数据?
为了使用 Python 从深度网络数据库中抓取信息,我们将向数据库服务器发送一个请求,该请求模仿 网站 向服务器发送请求的方式,就好像您实际上是通过 网站 提交搜索一样。
在这一点上,有人可能想知道为什么我们应该使用 python 而不仅仅是 网站,因为使用 python 我们可以一次搜索大量数据库。假设我们正在研究某人,而您想知道他们是否有法律问题。
因此,我们可以在法庭记录中搜索它们,搜索法庭记录的手动过程将需要我们搜索大量数据库,因为*敏*感*词*管辖权重叠并且每个数据库都有单独的数据库。
如何抓取深度网络数据库:使用“参数”
您可以使用以下名为 Basic_Scraper 的简单 Python 脚本来抓取您选择的数据库。该脚本通过向 url 标识的位置发送信息(参数)来工作。
# Basic_Scraper
import requests
params = {'firstname': 'John', 'lastname': 'Smith'}
r = requests.post("http://FAKE-WEBSITE-URL/processing.php", data=params)
print(r.text)
您需要输入 url、输入名称以及要查询的任何数据。这个怎么做?首先,导航到要抓取的 网站 的搜索页面。
我们可以使用一个随机的商业注册表作为深度网络数据库的示例。对于本演练,我使用的是 Chrome 浏览器,但任何浏览器都可以,浏览器功能的名称可能略有不同。
我们想使用 html-viewer 来查看 网站search 函数的 html 代码。网站 有一个注册表搜索栏,因此我们右键单击文本区域(您输入搜索词的位置)并单击“检查”。在开发者工具的浏览器中打开一个窗口,在功能选项卡下,网站 的 html 可见,搜索栏文本区域的 html 代码突出显示。请参阅下面的屏幕截图。
这标识了数据库搜索功能的“输入”元素或标签,我们将使用我们的代码和示例脚本 Basic_Scraper 中的“参数”来模拟它。html 告诉我们该元素被标识为“FindBox”,这与示例脚本中的标识符“firstname”相关。
其次,输入一个随机搜索词“Jack”,然后按 ENTER 键查看示例搜索如何影响 html。该网页现在列出了标题中带有“Jack”一词的公司。浏览器的 html 查看器显示搜索功能的代码已被刷新,并且一些新内容已添加到输入元素中。如下面屏幕截图的第二行所示,该元素具有额外的文本,内容为“value="jack"”。
现在我们知道如何识别搜索函数的参数及其值了。这在 Python 中称为字典,因为有一个键 (FindBox) 和一个关联的值 (jack)。因此,为了从带有“Jack”一词的公司中抓取该数据库,我们将示例脚本的参数更改为:
参数 = {'FindBox': 'Jack'}
第三,我们通过 POST 请求将此信息发布到数据库的服务器。但是我们需要确定一个 url 来发送我们的请求。
输入网页源代码,在HTML中找到form标签的“action”,其内容类似于“action=”后跟一个url。这将识别您将用于发送信息的 url。它将为您提供完整的 URL 或只是尾随部分。
例如,它可能读取“action=/processing.php”,它确认相关的 url 以 processing.php 结尾。有时你只是将它添加到搜索页面的 url 的末尾,或者有时你会用它来替换 url 的最后一段。
最终产品(URL)将被粘贴到上面的脚本中,在脚本中留下括号,它说:
在我们的示例数据库中,目标 url 与我们之前访问的网页的 url 相同。因此,我们向带有参数的 url 发送 POST 请求,并将响应分配给值 r。它应该如下所示:
然后我们可以输入“print(r)”查看对应的状态码来判断服务器的对应状态。如果状态码为“200”,则表示返回数据成功。这时候我们也可以输入“print(r.text)”来获取文本类型的对应内容。这些响应内容与我们在 网站 上发起 HTTP 请求时看到的响应正文的结果是一致的。
与任何 python 脚本一样,如果遇到问题,请尝试从命令行运行它并尝试输入 python3 而不是 python 并确保没有多余的行或换行符(在不小心按 enter 并在新行上开始文本之后) # 是后面的注释。
import requests
from bs4 import BeautifulSoup
#Scraping data
params = {'FindBox': 'Jack'}
r = requests.post('http://cr.justice.gov.lb/search/res_list.aspx', params)
print(r)
print(r.text)
然后,我们将收到结果数据作为响应,如下所示:
下面是同一脚本的一个版本,在末尾添加了一个部分来解析数据。这样,脚本不会检索大量数据,而只会列出您的搜索结果。
# commercial registry scraper
import requests
from bs4 import BeautifulSoup
#Scraping data
params = {'FindBox': 'Jack'}
r = requests.post('http://cr.justice.gov.lb/search/res_list.aspx', params)
html = r.text
#Parse the data
bs = BeautifulSoup(html, 'html.parser')
companies = bs.find_all('div', {'class' : {'res_line1' }})
dates = bs.find_all('div', {'class' : {'res_line2' }})
for company in companies:
link = bs.find('a')
for link in company:
articleUrl = (link.attrs['href'])
for date in dates:
print(company.get_text(),
'registration date and region:', date.get_text(),
'registration link:', ('http://cr.justice.gov.lb/search/{}'.format(articleUrl)))
此添加会解析数据,以便结果列出每个公司的名称、注册号以及指向其在目录中的文件的链接。结果如下所示:
第二部分,标题为#Parse the data,使用 Python 的 BeatifulSoup 库使响应数据更易于理解。BeautifulSoup 是一个用于解析 html(以及其他东西)的复杂工具,它已经写了一整本书,所以我们不会在本 文章 中讨论它。此处仅用于简化响应数据。
如何爬取深层网络数据库:模拟浏览器操作
以上方法通常用于查看浏览器开发者工具,分析服务器在向数据库提交HTTP请求时的响应状态。
但是在我们实际工作中,如果提交某个关键词搜索相关信息,空白搜索页面的URL和输入关键词后的结果URL是一样的,也就是说上面的这里可以使用方法。不起作用。
这是因为在实际的动态网页中,Ajax请求的很多参数都是加密的,用户通过分析Ajax请求很难得到真实的URL,而且有些动态加载的数据不是Ajax生成的。这时可以使用 Selenium 模拟浏览器的方法来获取网页动态加载和渲染的数据。
Selenium 是一种自动化测试工具,可驱动浏览器执行特定操作(如点击、输入等)。同时,还可以获取浏览器当前渲染的页面内容,以便在可见的情况下进行爬取。Python 提供了 Selenium 库来实现操作。
特此声明:本文旨在分享交流学习的工具。请读者在合理合法的范围内使用,时刻牢记合法红线,不要利用该工具和技术做任何违法的事情。
本文文章为傅云原创内容,未经授权禁止转载
富韵原创IP形象设计,原创请勿盗用,侵权必究