我4个月前写了我的第一个"Hello World".从那时起,我一直在学习莱斯大学提供的Coursera Python课程.我最近参与了一个涉及元组和列表的迷你项目.将元组添加到列表中有一些奇怪的事情:
a_list = []
a_list.append((1, 2)) # Succeed! Tuple (1, 2) is appended to a_list
a_list.append(tuple(3, 4)) # Error message: ValueError: expecting Array or iterable
Run Code Online (Sandbox Code Playgroud)
这对我来说很困惑.为什么使用"tuple(...)"而不是简单的"(...)"来指定要附加的元组会导致ValueError?
这真的很微不足道,但不敢相信我已经徘徊了一个小时仍然可以找到答案,所以你在这里:
df = pd.DataFrame({"cats":["a","b"], "vals":[1,2]})
df.cats = df.cats.astype("category")
df
Run Code Online (Sandbox Code Playgroud)
我的问题是如何选择其“cats”列的类别为“a”的行。我知道这df.loc[df.cats == "a"]会起作用,但它基于元素的相等性。有没有办法根据类别级别进行选择?
我对scrapy有这个规则 CrawlSpider
rules = [
Rule(LinkExtractor(
allow= '/topic/\d+/organize$',
restrict_xpaths = '//div[@id= "zh-topic-organize-child-editor"]'
),
process_request='request_tagPage', callback = "parse_tagPage", follow = True)
]
Run Code Online (Sandbox Code Playgroud)
request_tagePage()指将cookie添加到请求parse_tagPage()中的函数,指的是解析目标页面的函数。根据文档, CrawlSpider 应该用于request_tagPage发出请求,一旦返回响应,它就会调用parse_tagPage()解析它。但是,我意识到request_tagPage()使用时,蜘蛛根本不会调用parse_tagPage()。所以在实际的代码中,我手动添加了parse_tagPage()回调函数作为 中的回调request_tagPage,像这样:
def request_tagPage(self, request):
return Request(request.url, meta = {"cookiejar": 1}, \ # attach cookie to the request otherwise I can't login
headers = self.headers,\
callback=self.parse_tagPage) # manually add a callback function.
Run Code Online (Sandbox Code Playgroud)
它起作用了,但现在蜘蛛不使用规则来扩展它的爬行。它在从 抓取链接后关闭start_urls。但是,在我手动将parse_tagPage()as 回调设置为之前request_tagPage() …