我用BeautifulSoup做了这个,但它有点麻烦,我想弄清楚我是否可以直接用Selenium来做.
假设我有以下HTML,它在页面源中重复多次,具有相同的元素但内容不同:
<div class="person">
<div class="title">
<a href="http://www.url.com/johnsmith/">John Smith</a>
</div>
<div class="company">
<a href="http://www.url.com/company/">SalesForce</a>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
我需要建立一个字典,每个人的条目看起来像:
dict = {'name' : 'John Smith', 'company' : 'SalesForce'}
Run Code Online (Sandbox Code Playgroud)
通过执行以下操作,我可以轻松地让Selenium生成每个顶级元素的内容列表:
driver.find_elements_by_class_name('person')
Run Code Online (Sandbox Code Playgroud)
但是后来我不能遍历列表,因为上面的方法不会将范围/源缩小到只是该元素的内容.
如果我尝试做这样的事情:
people = driver.find_elements_by_class_name('person')
for person in people:
print person.find_element_by_xpath['//div[@class="title"]//a').text
Run Code Online (Sandbox Code Playgroud)
我一遍又一遍地得到同样的名字.
我需要按组进行分组,因为在我的情况下,遍历整个页面并单独附加每个标记将无效(存在无限滚动,因此效率非常低).
有谁知道是否有可能直接在Selenium中这样做,如果是这样的话怎么样?
编辑:阅读建议的链接后,我不知道为什么这被标记为重复.起诉我.
任何人都可以帮助我理解为什么filter(None, [list of bools])删除False值?
请考虑以下事项:
low = 25
high = 35
to_match = [15, 30, 32, 99]
def check(low, high, to_match):
return [low <= i <= high for i in to_match]
Run Code Online (Sandbox Code Playgroud)
check(low, high, to_match) 回报 [False, True, True, False]
filter(None, check(low, high, to_match)) 回报 [True, True]
所以我想,Python必须考虑的False是None!令我惊讶的是,False is None回归False!
A)我错过了什么?
B)如何仅过滤None来自的值[True, None, False]?
我有一个脚本可以查看生日列表,然后计算年龄。有的生日有年、月、日,有的只有月、日。
对于那些有岁月的人,我有dob = date(year, month, day)
但对于没有年份的人来说,存储日期的适当约定是什么,因为date()需要年份参数?
现在我说每个没有出生年份的人都出生在1500年(这样我至少可以在以后轻松识别他们),但这显然是一个愚蠢的解决方案。
我正在使用 Python 2.7 并且是自定义异常的新手。我已经尽可能多地阅读了它们,但在这个特定问题上没有找到太多帮助。
我正在调用一个 API,它返回一个带有大多数响应的状态代码。例如,0 是“成功”,1 是“参数数量错误”,2 是“缺少参数”等。
收到回复后,我会检查状态以确保在出现问题时不会继续。我一直在提出一个通用的异常,例如:
if response.get('status') != 0:
print 'Error: Server returned status code %s' % response.get('status')
raise Exception
Run Code Online (Sandbox Code Playgroud)
如何创建自定义异常来查找状态代码并将其作为异常错误消息的一部分返回?我设想如下:
if response.get('status') != 0:
raise myException(response.get('status'))
Run Code Online (Sandbox Code Playgroud) 在进行一些抓取工作时,我不断<tbody>在 Chrome DevTools 检查器中遇到该标签,但它没有出现在源代码中。由于我希望是显而易见的原因,我发现这非常令人困惑。这里发生了什么?(我还应该补充一点,这个页面上的 html 格式非常错误)。
例如,DevTools 显示:
<table>
<tbody>
<tr valign="top">
<td>...</td>
Run Code Online (Sandbox Code Playgroud)
页面源码显示:
<table border="0">
<tr valign="top">
<td>
Run Code Online (Sandbox Code Playgroud) 给定mylist = [0, 1]
def catch_index_error(value):
try:
return value
except IndexError:
return None
catch_index_error(mylist[5])
Run Code Online (Sandbox Code Playgroud)
返回一个IndexError
参数在函数执行之前计算,因此函数无法捕获异常。有办法捕捉吗?
在我的工作文件夹中,我有一个名为exceptions.py的文件,其中仅包含:
class ParseException(Exception):
pass
class QueryException(Exception):
pass
Run Code Online (Sandbox Code Playgroud)
在同一文件夹中我有一个文件,我们称之为my_script.py
在my_script.py中,当我这样做时,from exceptions import ParseException我收到一个错误:
ImportError:无法导入名称ParseException
我无法弄清楚这里发生了什么.我之前从未见过这个错误,当我查看它时,我主要看到循环依赖的问题,但我在这里没有...
我的工作文件夹是/ scripts /
我创建了一个只包含字典的文件
my_dict = {'sky' : 'blue'}
Run Code Online (Sandbox Code Playgroud)
在那个文件中,我可以print my_dict['sky'].
在PyCharm中,我在/ scripts/called/scripts/dictionaries /中创建了一个新文件夹.在里面我有一个名为dictionary_file.py的文件,里面是my_dict.
似乎PyCharm自动生成了一个字典模块.我可以,from dictionaries import my_dict但为什么我尝试做my_dict ['sky']我得到:
TypeError: 'module' object has no attribute '__getitem__'
Run Code Online (Sandbox Code Playgroud)
我确定这是一个愚蠢的noob问题,但我被困住了.在此先感谢您的帮助.
我正在尝试为抓取工具生成一些可预测的URL.
我有一组基本网址:
base_urls = ['http://something.com/john',
'http://something.com/sally']
Run Code Online (Sandbox Code Playgroud)
每个日历都有一个独特的网址:
to_append = ['-mon-calendar',
'-tues-calendar',
'-wed-calendar',
'-thurs-calendar',
'-fri-calendar']
Run Code Online (Sandbox Code Playgroud)
我需要生成一个新数组,其中包含所有人的每周日历的完整列表(例如 'http://something.com/john-mon-calendar',...
我可以在很长一段时间内完成这一过程,但我认为可以更有效地完成它map().我没有使用过很多地图而且用两个迭代来做这件事让我失望了.有人能指出我正确的方向吗?