当我运行脚本从网页上获取电话号码时,脚本会以杂乱的方式执行此操作。我为了达到同一目标而粘贴了两个不同的脚本。
我想坚持使用oneliner解决方案(第二个脚本)。如何修改我的第二个脚本以摆脱第一个脚本的空白?他们的机器人以相同的方式工作,但为什么输出的变化?
这几乎准确(只有一个空格):
template <typename F, typename OperatorType>
struct has_defulat_arg_impl : std::false_type {};
template <typename F, typename R, typename... Args>
struct has_defulat_arg_impl<F, R(F::*)(Args...) const>
: is_invocable_for_indices<F, std::make_index_sequence<sizeof...(Args) - 1>, Args...> {};
// specialization for the case where sizeof...(Args) == 0
template <typename F, typename R>
struct has_defulat_arg_impl<F, R(F::*)() const> : std::false_type {};
template <typename F>
using has_defulat_arg = has_defulat_arg_impl<F, decltype(&F::operator())>;
template <typename F>
inline constexpr bool has_defulat_arg_v = has_defulat_arg<F>::value;
// example use
auto f = [](int i = 0) {};
auto g = [](int i) {};
static_assert(has_defulat_arg_v<decltype(f)>);
static_assert(!has_defulat_arg_v<decltype(g)>);
我希望我的脚本如下所示。它也会获取正确的项目,但会出现大量的空白。
from bs4 import BeautifulSoup
import requests
url = "replace with above link"
req = requests.get(url)
sauce = BeautifulSoup(req.text,"lxml")
for items in sauce.select_one("table[width='610']").select("tr"):
for item in items.select("td"):
if "phone" in item.text:
print(item.find_next_sibling().get_text())
我希望得到的结果(周围没有空格):
from bs4 import BeautifulSoup
import requests
url = "replace with above link"
req = requests.get(url)
sauce = BeautifulSoup(req.text,"lxml")
for items in sauce.select_one("table[width='610']").select("tr"):
phone = [item.find_next_sibling().get_text() for item in items.select("td") if "phone" in item.text]
print(phone)
这就是嵌入该网站的方式:
212 22 24 24 57
答案 0 :(得分:1)
可以使用strip()
删除字符串中的尾随和前导空格。
对于第一个解决方案,只需执行此操作:
phone = []
for items in sauce.select_one("table[width='610']").select("tr"):
for item in items.select("td"):
if "phone" in item.text:
numbers.append(item.find_next_sibling().text.strip())
print(phone)
第二种解决方案不起作用,因为您正在为循环的每次迭代创建和打印新列表。如果要使用列表推导,则必须执行相同的嵌套循环:
phone = [item.find_next_sibling().get_text().strip() for items in sauce.select_one("table[width='610']").select("tr") for item in items.select("td") if "phone" in item.text]
print(phone)
我个人认为第一种选择更容易理解。
答案 1 :(得分:0)
我无法检查或测试您的示例(我收到请求错误urllib3) 我想你需要尝试这样的事情:
req = requests.get(url)
sauce=BeautifulSoup(req.content,"html5lib")
table=sauce.find("div",{"color":"#919CBA"})
for rows in table:
tabs=rows.find_all("tr")
for trtag in tabs:
phone.append(trtag.find("td"))
print(phone)