我想知道Scrapy是否有基于CSS中定义的颜色来刮取数据的方法.例如,选择所有元素background-color: #ff0000.
我试过这个:
response.css('td::attr(background-color)').extract()
Run Code Online (Sandbox Code Playgroud)
我期待一个列表,其中包含为表数据元素设置的所有背景颜色,但它返回一个空列表.
通常可以通过Scrapy中的CSS属性定位元素吗?
unittest包新手.我正在尝试通过以下代码验证函数返回的DataFrame.即使我将输入硬编码assert_frame_equal为等于(pd.DataFrame([0,0,0,0])),单位测试仍然失败.有人想解释它为什么会发生吗?
import unittest
from pandas.util.testing import assert_frame_equal
class TestSplitWeight(unittest.TestCase):
def test_allZero(self):
#splitWeight(pd.DataFrame([0,0,0,0]),10)
self.assert_frame_equal(pd.DataFrame([0,0,0,0]),pd.DataFrame([0,0,0,0]))
suite = unittest.TestLoader().loadTestsFromTestCase(TestSplitWeight)
unittest.TextTestRunner(verbosity=2).run(suite)
Run Code Online (Sandbox Code Playgroud)
Error: AttributeError: 'TestSplitWeight' object has no attribute 'assert_frame_equal'
我在使用LDAP身份验证模块django-auth-ldap时遇到问题.我正在使用此站点的示例配置:http://packages.python.org/django-auth-ldap/
我想做两件事:
1)针对LDAP进行身份验证:目前,我的LDAP数据库是空的,我没有添加任何内容,实际上我不知道如何.但是,我仍然能够使用存储在我的django数据库中的旧登录/密码登录到基于django的站点.这是为什么?这不应该被忽略,不应该使用LDAP用户/密码进行登录过程吗?换句话说,如果我的LDAP数据库为空,那么我的每次登录都不应该失败吗?但是,它没有,我的印象是django完全忽略了django-auth-ldap模块.
2)使用django同步LDAP(而不是相反)我不想使用现有的用户数据库进行身份验证.我希望能够在Django中创建新用户并将这些用户传播到LDAP,这样他们就可以被其他服务共享,在我的例子中是一个openfire服务器.你是怎么用django-auth-ldap那样做的?
这是我的配置的复制/粘贴:
# Baseline configuration.
AUTH_LDAP_SERVER_URI = "127.0.0.1"
AUTH_LDAP_BIND_DN = "cn=admin,dc=nodomain"
AUTH_LDAP_BIND_PASSWORD = "admin"
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=nodomain",
ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
# Set up the basic group parameters.
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=django,ou=groups,dc=nodomain",
ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
)
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn")
# Only users in this group can log in.
AUTH_LDAP_REQUIRE_GROUP = "cn=enabled,ou=django,ou=groups,dc=nodomain"
# Populate the Django user from the LDAP directory.
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
AUTH_LDAP_PROFILE_ATTR_MAP = {
"employee_number": "employeeNumber"
} …Run Code Online (Sandbox Code Playgroud) 在高层次上,我想要完成的是:
given a list of words, return all the words that do not consist solely of digits
Run Code Online (Sandbox Code Playgroud)
我第一次想到如何做到这一点是:
import string
result = []
for word in words:
for each_char in word:
if each_char not in string.digit:
result.append(word)
break
return result
Run Code Online (Sandbox Code Playgroud)
这很好用.为了更加Pythonic,我想 - 列表理解,对吗?所以:
return [word for word in words for char in word if not char in string.digits]
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会word为每个不是数字的字符添加结果副本.所以f(['foo']),我最终得到了['foo', 'foo', 'foo'].
有没有一种聪明的方法可以做我想做的事情?我目前的解决方案是编写一个is_all_digits函数,然后说[word for word in words if not is_all_digits(word)].我的一般理解是列表推导允许这种操作是声明性的,并且辅助函数对我来说是充分的声明; 只是好奇是否有一些聪明的方法使它成为一个复合语句. …
我有以下代码从制表符分隔的文本文件中读取数据,然后将其写入现有Excel工作簿中的指定工作表.变量"workbook","write_sheet"和"text_file"由用户输入
tab_reader = csv.reader(text_file, delimiter='\t')
xls_book = openpyxl.load_workbook(filename=workbook)
sheet_names = xls_book.get_sheet_names()
xls_sheet = xls_book.get_sheet_by_name(write_sheet)
for row_index, row in enumerate(tab_reader):
number = 0
col_number = first_col
while number < num_cols:
cell_tmp = xls_sheet.cell(row = row_index, column = col_number)
cell_tmp.value = row[number]
number += 1
col_number += 1
xls_book.save(workbook)
Run Code Online (Sandbox Code Playgroud)
但是,当我在预先存在的"工作簿"上运行此代码时,"工作表"是一个隐藏的选项卡,输出将取消隐藏选项卡.我认为原因是因为openpyxl没有修改文件而是完全创建一个新文件.是否有一种简单的方法告诉python检查工作表是否被隐藏,然后根据条件是否满足输出隐藏或未隐藏的工作表?
谢谢!
我正在使用Protractor来测试AngularJS
我想检查一下,在测试结束时没有发生未捕获的异常,并打印到浏览器控制台.
有一个简单的方法吗?
Protractor 1.7.0引入了一个新功能:一个新的定位器by.deepCss,有助于在shadow DOM中查找元素.
它涵盖了哪些用例?您何时想要到达影子DOM中的元素?
我提出这个问题的原因是我在这个问题的动机部分缺失了 - 我认为量角器主要是一个有助于模仿真实用户交互的高级框架.访问影子树听起来像是一个非常深层次的技术问题,为什么你想这样做让我感到困惑.
selenium css-selectors selenium-webdriver shadow-dom protractor
我们有一个非常标准的Scrapy项目(Scrapy 0.24).
我想捕获特定的HTTP响应代码,例如200,500,502,503,504等.
像这样的东西:
class Spider(...):
def parse(...):
processes HTTP 200
def parse_500(...):
processes HTTP 500 errors
def parse_502(...):
processes HTTP 502 errors
...
Run Code Online (Sandbox Code Playgroud)
我们怎么做?
我想验证字符串中是否存在某些文本(使用量角器).
在我的例子中,以下代码:
element(by.css('h1.text-center')).getText();
Run Code Online (Sandbox Code Playgroud)
将导致:
ArrowGrey Slim Fit Formal Trouser -1 (Size - X)
Run Code Online (Sandbox Code Playgroud)
现在,我想验证字符串ArrowGrey Slim Fit Formal Trouser是否包含在上面的文本中.
请指教!
在之前的问题中,我已经看到等待url更改的好方法是使用:
browser.wait( function() {
return browser.getCurrentUrl().then(function(url) {
return /myURL/.test(url);
});
}, 10000, "url has not changed");`
Run Code Online (Sandbox Code Playgroud)
但我试图有一个方法,我可以将myURL作为变量传递(如果我需要将其与其他网站一起使用)并且无法正常工作.
我在我的Page Object文件中尝试这个:
this.waitUrl = function(myUrl) {
browser.wait( function(myUrl) {
return browser.getCurrentUrl().then(function(url, myUrl) {
return myUrl.test(url);
});
}, 10000, "url has not changed");
};
Run Code Online (Sandbox Code Playgroud)
如果这是可能的任何想法,如果这样做怎么办?
python ×5
protractor ×4
javascript ×3
scrapy ×2
selenium ×2
testing ×2
angularjs ×1
asynchronous ×1
automation ×1
backend ×1
css ×1
django ×1
excel ×1
html ×1
jasmine ×1
ldap ×1
list ×1
openpyxl ×1
pandas ×1
shadow-dom ×1
unit-testing ×1
web-scraping ×1