我有以下HTML:
<h1 class="price">
<span class="strike">$325.00</span>$295.00
</h1>
Run Code Online (Sandbox Code Playgroud)
我想把295美元拿出来。但是,如果我仅按如下方式使用PyQuery:
price = pq('h1').text()
Run Code Online (Sandbox Code Playgroud)
我得到两个价格。
仅提取jQuery中元素的直接子文本看起来相当复杂-在PyQuery中有没有办法做到这一点?
目前,我正在分别提取第一个价格,然后使用replace将其从文本中删除,这有点麻烦。
谢谢你的帮助。
如何将类的属性附加或插入其子元素,但仅针对直接子元素,然后重复下一个类和子元素.
在文档中,这里引用了pyquery操作
>>> d = pq('<html><body><div id="test"><a href="http://python.org">python</a> !</div></body></html>') >>> p.prependTo(d('#test')) [<p#hello.hello>] >>> d('#test').html() u'<p class="hello" ..
Run Code Online (Sandbox Code Playgroud)
样品
<meeting id="42499" barriertrial="0" venue="Royal Randwick" date="2016-04-09T00:00:00" gearchanges="-1" stewardsreport="-1" gearlist="-1" racebook="0" postracestewards="0" meetingtype="TAB" rail="Timing - Electronic : Rail - +6m 1600-wp +3m Rem" weather="Fine " trackcondition="Soft 6 " nomsdeadline="2016-04-04T11:00:00" weightsdeadline="2016-04-05T16:00:00" acceptdeadline="2016-04-06T09:00:00" jockeydeadline="2016-04-06T12:00:00">
<club abbrevname="Australian Turf Club" code="56398" associationclass="1" website="http://" />
<race id="211911" number="1" nomnumber="10" division="0" name="TFE HOTELS FERNHILL HANDICAP" mediumname="FERNHILL" shortname="FERNHILL HCP" stage="Results" distance="1600" minweight="0" raisedweight="0" class="~ " age="2 " grade="0" weightcondition="QLT …Run Code Online (Sandbox Code Playgroud) 我正在尝试解析html的片段:
<body><h1>title</h1><img src=""></body>
Run Code Online (Sandbox Code Playgroud)
我用lxml.html.fromstring.它让我疯狂,因为它不断剥离<body>我的碎片标签:
> lxml.html.fromstring('<html><h1>a</h1></html>').tag
'html'
> lxml.html.fromstring('<div><h1>a</h1></div>').tag
'div'
> lxml.html.fromstring('<body><h1>a</h1></body>').tag
'h1'
Run Code Online (Sandbox Code Playgroud)
我也试过了document_fromstring,fragment_fromstring,clean_html与page_structure=False等...没有什么工作.
我需要使用lxml,因为我将html片段传递给PyQuery.
我只是希望lxml不要弄乱我的html片段.有可能吗?
我有一个简单的问题.我正在尝试从在线源中提取JSON,并将其存储在SQLite表中.除了将数据存储在富表中,对应于JSON中的许多字段之外,我还想在每次拉取时将整个JSON转储到表中.
该表看起来像:
CREATE TABLE Raw_JSONs (ID INTEGER PRIMARY KEY ASC, T DATE DEFAULT (datetime('now','localtime')), JSON text);
Run Code Online (Sandbox Code Playgroud)
我使用以下python代码从某个URL中提取了一个JSON:
from pyquery import PyQuery
from lxml import etree
import urllib
x = PyQuery(url='json')
y = x('p').text()
Run Code Online (Sandbox Code Playgroud)
现在,我想执行以下INSERT命令:
import sqlite3
db = sqlite3.connect('a.db')
c = db.cursor()
c.execute("insert into Raw_JSONs values(NULL,DATETIME('now'),?)", y)
Run Code Online (Sandbox Code Playgroud)
但我告诉我,我提供了错误的数字绑定(即数千,而不是1).我收集它正在读取y变量作为JSON的所有不同元素.
有人可以帮我存储JSON,完整吗?
此外,由于我显然是这个JSON游戏的新手,所以推荐的任何在线资源都会令人惊叹.
谢谢!
我对其中一项测试进行查询,该测试返回 2 个结果。具体来说,使用发现的大纲的第三级
query = html("ul ol ul")
Run Code Online (Sandbox Code Playgroud)
如何选择第一个或第二个无序列表?
query[0]
Run Code Online (Sandbox Code Playgroud)
衰减为 HTMLElement
list(query.items())[0]
Run Code Online (Sandbox Code Playgroud)
或者
query.items().next() #(in case of the first element)
Run Code Online (Sandbox Code Playgroud)
还有什么我看不到的更好的方法吗?
笔记:
query = html("ul ol ul :first")
Run Code Online (Sandbox Code Playgroud)
获取每个列表的第一个元素而不是第一个列表。
我正在尝试在Windows 上安装pyquery,当我尝试做这样的选择时,我得到以下错误d('p:first').其他一切似乎都在起作用.知道我错过了什么吗?这个问题只发生在我的Windows机器上,我的MAC工作正常.
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyquery import PyQuery as pq
>>> d = pq("<p></p>")
>>> d('p:first')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pyquery-1.2.4-py2.7.egg\pyquery\pyquery.py
", line 237, in __call__
result = self.__class__(*args, parent=self, **kwargs)
File "C:\Python27\lib\site-packages\pyquery-1.2.4-py2.7.egg\pyquery\pyquery.py
", line 213, in __init__
xpath = self._css_to_xpath(selector)
File "C:\Python27\lib\site-packages\pyquery-1.2.4-py2.7.egg\pyquery\pyquery.py
", line …Run Code Online (Sandbox Code Playgroud) 我正在写一个蜘蛛,我想知道哪个链接意味着“下一页”,所以我需要通过值=“下一页”来获取元素,然后获取链接。它不仅仅是包含一个标签,它是一整套html源代码,我想获取具体的链接。
如果我想得到一个像这样的元素
`<a href="http://*****">..</a>`
Run Code Online (Sandbox Code Playgroud)
我可以用
`'a[href^="http"]'`
Run Code Online (Sandbox Code Playgroud)
我尝试
`'a[text="value"]'`
Run Code Online (Sandbox Code Playgroud) 我的问题是我必须抓取一个具有以下内容的网站:
<div class="xyz tab"> blah blah </div>
Run Code Online (Sandbox Code Playgroud)
同一网站中的另一个 div 如下:
<div class="xyz">blah blah</div>
Run Code Online (Sandbox Code Playgroud)
要抓取没有空间的网站,我可以使用这个
pyquery('.xyz').text()
Run Code Online (Sandbox Code Playgroud)
但是对于空间我该怎么办???
我试图使用pyquery 1.2从元素中获取一些文本.显示的文本中没有空格,但pyquery正在插入空格.
这是我的代码:
from pyquery import PyQuery as pq
html = '<h1><span class="highlight" style="background-color:">Randomized</span> and <span class="highlight" style="background-color:">non-randomized</span> <span class="highlight" style="background-color:">patients</span> in <span class="highlight" style="background-color:">clinical</span> <span class="highlight" style="background-color:">trials</span>: <span class="highlight" style="background-color:">experiences</span> with <span class="highlight" style="background-color:">comprehensive</span> <span class="highlight" style="background-color:">cohort</span> <span class="highlight" style="background-color:">studies</span>.</h1>'
doc = pq(html)
print doc('h1').text()
Run Code Online (Sandbox Code Playgroud)
这会产生(注意冒号和句号前的空格):
Randomized and non-randomized patients in clinical trials :
experiences with comprehensive cohort studies .
Run Code Online (Sandbox Code Playgroud)
如何阻止pyquery在文本中插入空格?
pyquery ×9
python ×9
lxml ×3
json ×1
lxml.html ×1
sqlite ×1
web-scraping ×1
windows ×1
xml-parsing ×1