我有以下文字:
<span class="page-number">42</span>
Run Code Online (Sandbox Code Playgroud)
我想创建一个伪元素,如下所示:
<span class="page-number">42</span>
Run Code Online (Sandbox Code Playgroud)
这样伪元素的内容就是元素的文本,在本例中为 42。我可以通过一些技巧来做类似的事情吗?
我使用一些代码使用XSLT 2.0从另一个日期中减去一个日期:
<xsl:template match="moveInDate">
<xsl:value-of select="current-date() - xs:date(.)"/>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
这是有效的,但它让我得到P2243D的答案,我假设它对应于"2243天的时期"(这在数学方面是正确的).
由于我只需要天数,而不是P和D,我知道我可以使用子串或类似的东西,但作为XSLT的新手,我很好奇是否有更好,更优雅的方式来做到这一点简单的字符串操作
我正在编写一些 Python 代码来抓取网站,我最终会得到越来越多的自定义抓取工具,每个大约 50 行长,并且从特定网站定制提取特定信息。
我的程序的第一次迭代是一个巨大的文件,它将网站作为参数,如果它识别出该网站并为其提供自定义代码(使用一个巨大的 case 语句来检查它是否识别该网站),则抓取该网站。
显然,这不是一个很好的设计,所以我想做的是将自定义抓取函数拉入它们自己的文件/类中,并有一个小脚本,我可以用它来按名称调用它们。例如:
scrape.py --site google
Run Code Online (Sandbox Code Playgroud)
我想要一个类似于以下内容的文件结构:
scrape.py
sites/
google.py
yahoo.py
...
bing.py
Run Code Online (Sandbox Code Playgroud)
我还没有掌握面向对象,但我认识到这是对它的呼唤,而且我正在寻找的可能是一个常见的 OO 模式。
任何帮助正确重构此代码?
PS - 我看过 Scrapy,由于各种原因,这并不是我真正需要的。
PPS - 我实际上不是在抓取搜索网站,而是在抓取美国法院网站。
我想弄清楚我xpath是否正确使用lxml的功能.这是我目前的代码,包括我们在一个相当大的抓取库中慢慢积累的所有变通方法,它们处理可怕的,可怕的输入:
import certifi, requests
from lxml import html
s = requests.session()
r = s.get(
url,
verify=certifi.where(),
**request_dict
)
# Throw an error if a bad status code is returned.
r.raise_for_status()
# If the encoding is iso-8859-1, switch it to cp1252 (a superset)
if r.encoding == 'ISO-8859-1':
r.encoding = 'cp1252'
# Grab the content
text = r.text
html_tree = html.fromstring(text)
Run Code Online (Sandbox Code Playgroud)
因此,如果这一切都正常,则requests用于r.encoding决定在r.text调用时如何创建unicode对象.大.我们接受那个unicode对象(text)并将其发送到ltml.html.fromstring(),它识别出它是unicode,然后给我们一个ElementTree.
这一切似乎都运作正常,但令人不安的是,当我这样做时:
html_tree.xpath('//text()')[0]
Run Code Online (Sandbox Code Playgroud)
哪个应该给我树中的第一个文本节点,我得到一个字符串,而不是一个unicode对象,我发现自己不得不写:
html_tree.xpath('//text()')[0].decode('utf8') …Run Code Online (Sandbox Code Playgroud) 我正在设置一个分布式芹菜环境来对PDF文件进行OCR.我有大约3M PDF和OCR是CPU绑定的,所以我们的想法是创建一个服务器集群来处理OCR.
在我写任务的时候,我有这样的事情:
@app.task
def do_ocr(pk, file_path):
content = run_tesseract_command(file_path)
item = Document.objects.get(pk=pk)
item.content = ocr_content
item.save()
Run Code Online (Sandbox Code Playgroud)
问题是我最好的方法是file_path在分布式环境中完成工作.人们通常如何处理这个问题?现在我的所有文件都只是存放在我们的一台服务器上的一个简单目录中.
这是一个长镜头,但我不得不问。我需要任何可能使 Tesseract OCR 引擎更快的想法。我正在处理由大约 2000 万页文本组成的 200 万个 PDF,我需要尽可能地发挥性能。目前的估计是,如果我什么都不做,这将需要大约一年的时间才能完成。
我已经调整了输入图像以在那里获得一些提升,但我需要考虑其他方法。我认为对图像的改进不会让我在这一点上有所作为。
例如:
目前,Tesseract 由我们的任务运行器 Celery 运行,它使用多处理来完成其工作。这样,我可以使服务器看起来像这样:
我(显然?)不知道我在说什么,因为我是一名 Python 开发人员,而 Tesseract 是用 C++ 编写的,但是如果有任何方法可以在这里得到提升,我会喜欢想法。
我正在尝试使用正则表达式作为输入,并从那里生成正则表达式匹配的所有可能值.
因此,例如,如果正则表达式是"以a开头并以c结尾的三个字母单词",那么代码将生成一个包含值[aac,abc,acc,adc,a1c ....]的列表.
是否有捷径可寻?我正在使用python.
我在 Jetty 容器中的本地主机上的服务器上运行 Solr。
这似乎是一个显而易见的问题,但是如何从服务器本身外部访问 Web 界面,例如从外部 IP 地址访问?显然,身份验证作为任何解决方案的一部分都很重要。
如果这是一个很好的解决方案,我也在服务器上运行 Apache2。我很惊讶我找不到任何关于此的信息。
我设置了socketserver来运行一些单元测试,并将其日志输出到控制台.
有没有办法禁用它?
这是我正在运行的代码:
class TestServer(SocketServer.TCPServer):
allow_reuse_address = True
class ScraperExampleTest(unittest.TestCase):
def setUp(self):
# Due to requests not supporting the 'file' scheme, we are forced to run
# our own server. See: https://github.com/kennethreitz/requests/issues/847
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = TestServer(('', PORT), Handler)
httpd_thread = threading.Thread(target=httpd.serve_forever)
httpd_thread.setDaemon(True)
httpd_thread.start()
Run Code Online (Sandbox Code Playgroud) 我使用PhantomJS作为Selenium webdriver,我有一个内存中的网页字符串.
如何将字符串加载到PhantomJS中,就像我做的那样driver.get()?
我看了一遍,但找不到这样的东西,没有把文件写到磁盘GETing上.但这感觉有点疯狂.