python - 使用 Python 从网站中提取表数据
问题描述
我正在尝试获取与用户尝试访问的任何网站相关的信息。为了阻止任何恶意网站访问,我需要黑名单状态、IP 地址、服务器位置等详细信息。我是从 URLVOID 网站获得的。< https://www.urlvoid.com/scan/ >
我以表格格式获得以下结果,并尝试在 spyder 中获取相同的结果。 见表
我正在使用正则表达式方法从表格中获取详细信息。
######
import httplib2
import re
def urlvoid(urlInput):
h2 = httplib2.Http(".cache")
resp, content2 = h2.request(("https://www.urlvoid.com/scan/" + urlInput), "GET")
content2String = (str(content2))
rpderr = re.compile('\<div\sclass\=\"error\"\>', re.IGNORECASE)
rpdFinderr = re.findall(rpderr,content2String)
if "error" in str(rpdFinderr):
ipvoidErr = True
else:
ipvoidErr = False
if ipvoidErr == False:
rpd2 = re.compile('(?<=Server Location</span></td><td>)[a-zA-Z0-9.]+(?=</td></tr>)')
rpdFind2 = re.findall(rpd2,content2String)
rpdSorted2=sorted(rpdFind2)
return rpdSorted2
urlvoid("google.com")
######
但是,它效率不高,并且此正则表达式不适用于所有网站。有没有更简单的方法来获取所有这些信息?
解决方案
我不建议你用正则表达式来抓取数据,因为它可以通过 来完成bs4
,如果你建立一个正则表达式来完成你需要很长时间和复杂的条件。
import requests
from bs4 import BeautifulSoup,NavigableString
import re
def urlvoid(urlInput):
url = "https://www.urlvoid.com/scan/" + urlInput
res = requests.get(url)
text = res.text
soup = BeautifulSoup(text,"lxml").find("table",class_="table table-custom table-striped")
all_tr = soup.find_all("tr")
value = { tr.find_all("td")[0].text :
tr.find_all("td")[1].text.replace("\xa0","")
for tr in all_tr}
print(value)
urlvoid("google.com")
推荐阅读
- excel - 试图制作一个公式来识别另一个是否为空白,然后添加一个数字 [Excel]
- python - 在同一前缀上注册多个 restplus 蓝图不起作用
- apache-camel - 防止 Apache AHC 向请求中添加“transfer-encoding:chunked”标头
- vue.js - 在 axios 调用时,DOM 不显示 vue.js 和 laravel 中数组的更新数据
- python - 如何找到将列拆分为两个新行的行?
- javascript - 无法在 javascript 中的模块外使用 import 语句
- algorithm - 需要帮助模拟基本导弹 - 目标模拟(算法 - 首选 Qbasic)
- git - git rebase -i HEAD~2 的问题
- graphql - 如何从 graphql 查询的 Contentful 内容类型获取 SYS 数据?
- ios - 为什么我取消选中内容布局指南后通过了自动布局检查