- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的程序将正常运行并打印所需的输出,但是运行需要一分多钟的时间。它抓取整个页面的数据,然后在数据中搜索所需的信息。延迟在于抓取数据。基本上我正在寻找的是一种只抓取包含所需信息的页面的数据的方法,而不是从整个页面抓取所有不相关的数据并大大减慢进程。
我需要的信息是包含“$”和“LDK2-ENY10”的第一 block 数据,变量z用于仅抓取第一 block 数据,而不是后面所有不相关的数据。
import requests
from time import time
from bs4 import BeautifulSoup
z = 0;
link = "http://yugiohprices.com/get_card_prices/Dark+Magician?_={}"
r = requests.get(link.format(int(time())))
soup = BeautifulSoup(r.content, "lxml")
rawdata = soup.find_all("td")
for thing in rawdata:
if "LDK2-ENY10" in str(thing) and "$" in str(thing) and z == 0:
print thing; z = 1;
这是当前的输出,只要抓取这个输出就可能足够快了,这似乎有点多余,因为我只需要第 10 行( <b>$0.33</b>
)、第 18 行( $0.77
)和第 29 行的信息( $5.28
),但是此时我不在乎,只想让程序在不花 2-5 分钟的情况下运行..(30 秒或更短就太棒了)
如果我的帖子中有任何遗漏,请告诉我,我会更新。
<td style="width: 206px; padding-right: 10px" valign="top">
<table border="1" id="item_stats" style="margin-bottom: 10px">
<tr>
<td class="key" style="border: 1px solid #000; width: 94px">
Lowest
<a alt="How are lowest prices calculated?" href="http://blog.yugiohprices.com/post/90183367316/lowest-card-price-is-now-picked-using-ebay-listings" target="_blank" title="How are lowest prices calculated?">(?)</a>
</td>
<td style="border: 1px solid #000; text-align: center">
<p style="margin: 2px">
<b>$0.33</b>
</p>
</td>
</tr>
<tr>
<td class="key" style="border: 1px solid #000; width: 94px">Highest</td>
<td style="border: 1px solid #000; text-align: center">
<p style="margin: 2px">
$5.28
</p>
</td>
</tr>
<tr>
<td class="key" style="border: 1px solid #000; width: 94px">
Average
<a alt="How are average prices calculated?" href="http://blog.yugiohprices.com/post/54460976914/how-are-average-prices-calculated" target="_blank" title="How are average prices calculated?">(?)</a>
</td>
<td style="border: 1px solid #000; text-align: center">
<p style="margin: 2px">
$0.77
</p>
</td>
</tr>
</table>
<table border="1" id="item_stats">
<tr style="height: 22px">
<td class="key" style="border: 1px solid #000; width: 80px">
<p style="margin-top: -6px; margin-bottom: -4px; margin-left: 0px; margin-right: -6px; font-weight: normal">
<b>
Shift
</b>
<br/>
(24 Hours)
</p>
</td>
<td style="border: 1px solid #000; text-align: center">
<p style="margin: 6px; margin-bottom: 9px">
<b style="color: red">
-9.41%
</b>
</p>
</td>
</tr>
<tr>
<td class="key" style="border: 1px solid #000; width: 80px">
<p style="margin-top: -6px; margin-bottom: -4px; margin-left: 0px; margin-right: -6px; font-weight: normal">
<b>Shift</b>
<br/>
(3 Days)
</p>
</td>
<td style="border: 1px solid #000; text-align: center">
<p style="margin: 6px; margin-bottom: 9px">
<b style="color: red">
-2.53%
</b>
</p>
</td>
</tr>
<tr>
<td class="key" style="border: 1px solid #000; width: 80px">
<p style="margin-top: -6px; margin-bottom: -4px; margin-left: 0px; margin-right: -6px; font-weight: normal">
<b>Shift</b>
<br/>
(1 Week)
</p>
</td>
<td style="border: 1px solid #000; text-align: center">
<p style="margin: 6px; margin-bottom: 9px">
<b style="color: red">
-9.41%
</b>
</p>
</td>
</tr>
<tr>
<td class="key" style="border: 1px solid #000; width: 94px">
<p style="margin-top: -6px; margin-bottom: -4px; margin-left: 0px; margin-right: -6px; font-weight: normal">
<b>Shift</b>
<br/>
(3 Weeks)
</p>
</td>
<td style="border: 1px solid #000; text-align: center">
<p style="margin: 6px; margin-bottom: 9px">
<b>
0%
</b>
</p>
</td>
</tr>
<tr>
<td class="key" style="border: 1px solid #000; width: 94px">
<p style="margin-top: -6px; margin-bottom: -4px; margin-left: 0px; margin-right: -6px; font-weight: normal">
<b>Shift</b>
<br/>
(30 Days)
</p>
</td>
<td style="border: 1px solid #000; text-align: center">
<p style="margin: 6px; margin-bottom: 9px">
<b>
0%
</b>
</p>
</td>
</tr>
<tr>
<td class="key" style="border: 1px solid #000; width: 94px">
<p style="margin-top: -6px; margin-bottom: -4px; margin-left: 0px; margin-right: -6px; font-weight: normal">
<b>Shift</b>
<br/>
(3 Months)
</p>
</td>
<td style="border: 1px solid #000; text-align: center">
<p style="margin: 6px; margin-bottom: 9px">
<b>
0%
</b>
</p>
</td>
</tr>
<tr>
<td class="key" style="border: 1px solid #000; width: 94px">
<p style="margin-top: -6px; margin-bottom: -4px; margin-left: 0px; margin-right: -6px; font-weight: normal">
<b>Shift</b>
<br/>
(6 Months)
</p>
</td>
<td style="border: 1px solid #000; text-align: center">
<p style="margin: 6px; margin-bottom: 9px">
<b>
0%
</b>
</p>
</td>
</tr>
<tr>
<td class="key" style="border: 1px solid #000; width: 94px">
<p style="margin-top: -6px; margin-bottom: -4px; margin-left: 0px; margin-right: -6px; font-weight: normal">
<b>Shift</b>
<br/>
(1 Year)
</p>
</td>
<td style="border: 1px solid #000; text-align: center">
<p style="margin: 6px; margin-bottom: 9px">
<b>
0%
</b>
</p>
</td>
</tr>
<tr>
<td class="key" colspan="2" style="text-align: center; border: 1px solid #000">
<a href="/price_history/LDK2-ENY10?rarity=Common" target="_blank">View History</a>
</td>
</tr>
</table>
<br/>
<div align="center">
<script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Yugioh Prices Skyscraper -->
<ins class="adsbygoogle" data-ad-client="ca-pub-7333610178228936" data-ad-slot="9136249004" style="display:inline-block;width:160px;height:600px"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</td>
最佳答案
首先,解析成为瓶颈的几率非常低 - 请重新检查该假设。
<小时/>第一个合乎逻辑的事情是摆脱 z
变量,并在找到所需信息后简单地打破循环。这应该会对执行时间产生重大影响:
for thing in rawdata:
thing_html = str(thing) # avoiding calling str() two times per iteration
if "LDK2-ENY10" in thing_html and "$" in thing_html:
print(thing)
break
<小时/>
或者/和,您可以避免解析完整的页面源代码和 parse only a part of the document with the SoupStrainer
。大致如下:
from bs4 import BeautifulSoup, SoupStrainer
td_only = SoupStrainer("td")
soup = BeautifulSoup(r.content, "lxml", parse_only=td_only)
不过,鉴于树的大小相对较小,我怀疑“仅解析”方法是否会产生重大影响。
<小时/>您可以尝试的另一件事是使用 PyPy
运行脚本解释器而不是常规的CPython
。您需要从 lxml
切换到 html.parser
或 html5lib
(或者您可以 install lxml
from the fork ),但是,经过几次快速测试后,我可以看到,其性能优于 CPython
+ lxml
。
关于python - 通过导入时间加快漂亮汤的速度(抓取太多不相关的数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252342/
我有这张图: digraph G { 1 [label="car"]; 2 [label="x"]; 3 [label="car"]; 4 [label="y"]; 5 [label="cdr"];
我有一个大型查询,其中一个简单的子查询优化将其从 8 分钟缩短到 20 秒。我不确定我是否理解为什么优化会产生如此巨大的效果。 本质上,这是问题部分: SELECT (bunch of stuff)
我在 NetBeans IDE 6.9.1 和 GlassFish 3 中遇到非常奇怪的问题。在使用 64 位 JDK 在 Windows 7 上安装 NetBeans 后,在没有创建任何项目的情况下
我有两个长度相同的数组。第一个数组是静态的,具有这种格式的数据 a = [['q', 10], ['s', 20], ['z', 40], ['d', 15]] 和另一个数组 b = [1, 0, 0
我在下面的代码中有一个编译错误。编译器似乎将类方法 set 解释为一个模板,乍一看,它与我的代码完全无关。 #include #include using namespace std; templ
我有一个完整的 Canvas CCLayer,上面有几个小的 CCLayer - 它们是按钮。在按钮上我启用了触摸监听器: - (id)init { if ((self = [super init
关于 this page ,当您将鼠标悬停在右上角的红色标记上时,css3 变换会旋转图像。这按预期工作,但 div.last.half 短暂地向右单击并返回到它的原始位置。 这仅出现在 Chrome
我目前正在重新设计我的网站以包含两栏。左栏是带有一些链接和文本的侧边栏,右栏是页面的正文(不是 )。我遇到的问题是页面上两个完全独立的元素的 CSS 规则会影响这两个元素。 因为这可能没有意义,这是
这是问题 here 的跟进关于使用参数依赖查找 (ADL) 的函数重载。我想检查一下我在这种情况下对规则的理解,所以我写了一些测试代码。 首先,在 std 中当然没有 HasPtr 类的交换,所以我写
我是 Developer Portal 中两个开发团队的成员。一个团队不再存在,也不再由团队的“代理”维护。 现在这就是我的问题。我正在尝试在 Xcode 中刷新我的配置文件,但不断收到一条消息,告诉
在调试问题时,我注意到在改变方向时,viewDidLoad不相关的UIViewController正在被调用。 它似乎与我的问题无关,但这完全很奇怪。 这个UIViewController只能从 UI
今晚,当我拖放一个早上运行良好的项目时,我继续收到数千个这样的错误。我有 140 个类,我无法跟踪我所做的所有修改:(。但我从未更改过与拖/放功能相关的任何内容。我已经完全远离了代码中引发这些问题的行
我的网页布局有一个奇怪的行为。当我在“sideBar”div 中添加更多 div 时,网页的中心部分被下推。它们与中心部分无关。他们有边界,我看到他们离“主要”分区很远。有什么办法可以防止它,或者我每
我们有 3 个独立的 git 存储库(每个都有一些分支),我们想将它们 merge 为一个保留完整历史记录和访问分支的能力,如下所示: 这就是我们所拥有的。 3 个 repo : /A/.git /B
我意识到“为什么会这样”的问题通常不是最好的问题,但是 SO 上有很多人关注标准委员会的讨论,所以我希望可以如实回答,因为我很好奇至于答案是什么。 基本上,当我第一次看到 std::result_of
我已经设法使 SqlDependency 正常工作,但前提是我不在我认为与 SqlDependency 无关的 SQL 事务中使用 IsolationLevel.ReadUncommited。 当我在
我一直在尝试使用反射动态设置字段。当谈到泛型类时,有一个障碍。考虑这段代码: 包装器.java: public class Wrapper { private T var; publi
我是一名优秀的程序员,十分优秀!