如果我的班级名字经常不同,比如说:
listing-col-line-3-11 dpt 41
listing-col-block-1-22 dpt 41
listing-col-line-4-13 CWK 12
Run Code Online (Sandbox Code Playgroud)
通常我可以这样做:
for EachPart in soup.find_all("div", {"class" : "ClassNamesHere"}):
print EachPart.get_text()
Run Code Online (Sandbox Code Playgroud)
有太多的类名可以在这里使用,所以其中一些是出来的.
我知道Python没有我通常会使用的".contains"但它确实有一个"in".虽然我还没有找到一种方法来融入它.
我希望有一种方法可以用正则表达式做到这一点.虽然我的Python语法真的让我失望但我一直在尝试变化:
regex = re.compile('.*listing-col-.*')
for EachPart in soup.find_all(regex):
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有成功.
在我的线程中,我使用一个简单的变量设置为'1'或'0'来表示它是否已准备好再次运行.试图调试一个问题,有时这不会被重置,我想我可能会有.
我不希望连接超时到一些无限的加载时间(我相信Selenium的默认值是没有超时)所以我使用:
Driver.set_page_load_timeout(30)
Run Code Online (Sandbox Code Playgroud)
后来我会检查那个帖子
If condition:
isrunning = 0
Run Code Online (Sandbox Code Playgroud)
我原本以为set_page_load_timeout会在30秒后停止加载但如果我正确理解它会实际抛出异常,所以我需要做类似的事情:
try:
Driver.set_page_load_timeout(30)
except:
isrunning = 0
Driver.Close()
-Do whatever else in function -
If condition:
isrunning = 0
Driver.Close()
Run Code Online (Sandbox Code Playgroud)
因此,如果它运行超过30秒,它将关闭并设置为0,否则它将运行并检查并稍后设置为0.
我很欣赏这是一小段代码,但完整的东西很长,我认为这是重要的部分.
如果有人能确认我在这里有正确的想法,我会很感激.我全力以赴进行测试,但这是一个问题,每8个小时发生一次,因此很难分开,但我认为这可能适合.
我在 XPATH 上慢慢地变得越来越好,但每次我认为我拥有它(至少在基本水平上)时,我认为显而易见的东西就会决定扔给我。
尝试单击列表项:
<li class="league_check " id="lg_chk_br_1_l_22953" onclick="BranchWindow.showLeague(1,22953);"> <img leagueid="22953" src="/i/none_v.gif" width="12" height="12" onclick="BranchWindow.switchLeague(1,22953); cancelBubble(event);">Champions League </li>
Run Code Online (Sandbox Code Playgroud)
有了这个:
eachleague = "Champions League"
link = Driver.find_elements_by_xpath("//li[contains(@class, 'league_check ') and text() = '%s']" % eachleague)
Run Code Online (Sandbox Code Playgroud)
我正在仔细检查所有内容是否已实际加载等...并且(根据我对 XPATH 的理解)这应该找到列表项。
任何人都可以阐明我所缺少的东西吗?
尝试使用 Python 将数据发送到 RabbitMQ 队列。
我尚未配置服务器,但它正在为其他进程运行。我有一个有效的登录名,可以毫无问题地访问网络输出。
RabbitMQ 为 python 提供的示例代码使用 Pika:
#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(
host='xxx.xxx.xxx.xxx:xxxxx'))
channel = connection.channel()
channel.queue_declare(queue='Test')
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
Run Code Online (Sandbox Code Playgroud)
这运行并让我开始:
pika.exceptions.ConnectionClosed
Run Code Online (Sandbox Code Playgroud)
没什么可继续的,但安全的假设是登录问题,因为示例代码没有任何登录信息。
所以我添加了它。
import pika
import sys
try:
credentials = pika.PlainCredentials('username', 'password')
connection = pika.BlockingConnection(pika.ConnectionParameters('xxx.xxx.xxx.xxx',
xxxxx,
'virtualhostnamehere',
credentials,))
channel = connection.channel()
channel.queue_declare(queue='Test')
channel.basic_publish(exchange='amq.direct',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
except:
e = sys.exc_info()[0]
print e
Run Code Online (Sandbox Code Playgroud)
它似乎在给我之前停留了好几分钟:
<class 'pika.exceptions.IncompatibleProtocolError'>
Run Code Online (Sandbox Code Playgroud)
服务器运行其他服务正常,但我似乎无法确定我做错了什么。
登录是正确的。虚拟主机名称正确。楼主说得对。交易所名称正确。
希望能指出正确的方向。
更新:
我也尝试使用 URLParameters 得到相同的结果。 …
使用Python和Selenium我试图点击链接,如果它包含文本.在这种情况下说14:10,这将是我追求的DIV.
<div class="league_check" id="hr_selection_18359391" onclick="HorseRacingBranchWindow.showEvent(18359391);" title="Odds Available"> <span class="race-status"> <img src="/i/none_v.gif" width="12" height="12" onclick="HorseRacingBranchWindow.toggleSelection(18359391); cancelBubble(event);"> </span>14:10 * </div>
Run Code Online (Sandbox Code Playgroud)
我一直在看手动浏览器.我知道在我的代码触发之前DIV已经加载但是我无法弄清楚它实际上在做什么.
看起来很简单.我不擅长XPATH,但我通常会管理基础知识.
justtime = "14:10"
links = Driver.find_elements_by_xpath("//div*[contains(.,justtime)")
Run Code Online (Sandbox Code Playgroud)
据我所知,该页面上没有其他链接包含文本14:10但是当我循环浏览链接并将其打印出来时,它基本上显示了该页面上的每个链接.
我试图将其缩小到该类名并包含文本
justtime = "14:10"
links = Driver.find_elements_by_xpath("//div[contains(.,justtime) and (contains(@class, 'league_check'))]")
Run Code Online (Sandbox Code Playgroud)
这根本不会返回任何东西.真的很难过,这对我来说毫无意义.
我正在将时间写入 XML 文件,然后回来将其与当前时间进行比较。我以前没有用 Python 做过这个,而且时间格式似乎很奇怪。
如果我将 timenow 写入 XML(没有毫秒),我就成功地将一些内容组合在一起。
如果 XML 具有类似于 2016-01-05 00:39:20 的时间戳,那么这有效:
tree = ET.parse('C:\logs\XMLFILENAME.xml')
for matchlisting in tree.findall('Found'):
age = matchlisting.find('FoundTime').text
dnow=datetime.datetime.now()
print dnow
d2 = datetime.datetime.strptime(age, '%Y-%m-%d %H:%M:%S')
#print d2
print(dnow-d2)
Run Code Online (Sandbox Code Playgroud)
但默认情况下, time.now 不会给出类似 2016-01-05 00:39:20 的内容,它会在后面添加毫秒,如 2016-01-05 00:39:20.xxxx。
我在文档中没有看到使用 strptime 处理毫秒的选项,也没有看到在没有毫秒的情况下编写 timenow 的方法,这也可以工作。
我希望有一些简单的语法来修复其中之一。我很感激这里有一个指针,几个小时以来我认为应该相当简单。
为了引出我知道这是一个坏主意。字典看起来像是一种更简洁的方式来做我需要做的事情,但我正在寻找一个占位符来保存东西,同时我想知道如何正确使用字典来满足我的需要。
与此同时,我有大约一打列表,我正在尝试将列表名称设置为与变量一起使用。
所以通常我会使用:
Listname.Append("Text")
Run Code Online (Sandbox Code Playgroud)
但是在循环的不同迭代中,我希望能够使用从较大字符串拆分的不同列表。
就像是:
x1 = []
x2 = []
x3 = []
for y in 1 to 3:
"x"+y.append("string")
Run Code Online (Sandbox Code Playgroud)
再说一次,我知道这是一个坏主意,我正在努力了解字典,但这相当于在我这样做的时候用胶带把东西粘在一起。
我想不出让这个工作的方法。它告诉我 .append 不适用于那个(我期望的)。我尝试用 str() 长期转换整个内容,但它当然告诉我你没有附加到字符串。
我知道这可能不是你想要经常做的事情,如果我确实通过 IDE 管理它会因为我做了愚蠢的事情而对我大喊大叫,但首先有可能吗?
python ×7
web-scraping ×3
selenium ×2
xpath ×2
amqp ×1
datetime ×1
pika ×1
python-2.7 ×1
rabbitmq ×1
regex ×1