当属性包含多个单词时,我在按属性选择节点时遇到问题.例如:
<div class="atag btag" />
Run Code Online (Sandbox Code Playgroud)
这是我的xpath表达式:
//*[@class='atag']
表达式适用于
<div class="atag" />
但不是前一个例子.我该如何选择<div>?
我想只选择一个名为.date的类
出于某种原因,我不能让这个工作.如果有人知道我的代码有什么问题,我将不胜感激.
@$doc = new DOMDocument();
@$doc->loadHTML($html);
$xml = simplexml_import_dom($doc); // just to make xpath more simple
$images = $xml->xpath('//[@class="date"]');
foreach ($images as $img)
{
echo $img." ";
}
Run Code Online (Sandbox Code Playgroud) 我知道如何获得相同css类的DIV列表,例如
<div class="class1">1</div>
<div class="class1">2</div>
Run Code Online (Sandbox Code Playgroud)
使用xpath //div[@class='class1']
但是如果div有多个类,例如
<div class="class1 class2">1</div>
Run Code Online (Sandbox Code Playgroud)
xpath会是什么样的呢?
我使用 selenium 来废弃滚动网站并执行以下代码
import requests
from bs4 import BeautifulSoup
import csv
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import unittest
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
import unittest
import re
output_file = open("Kijubi.csv", "w", newline='')
class Crawling(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.set_window_size(1024, 768)
self.base_url = "http://www.viatorcom.de/"
self.accept_next_alert = True
def test_sel(self):
driver = self.driver
delay = 3
driver.get(self.base_url + "de/7132/Seoul/d973-allthingstodo")
for i in range(1,1):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
html_source = driver.page_source
data = …Run Code Online (Sandbox Code Playgroud) 我正在开发一个只与IE7和IE8兼容的应用程序.我不知道为什么,但有些人建议在识别IE中的元素时使用CSS而不是XPath.当我访问官方Selenium网站时.我看了这条消息
WebDriver尽可能使用浏览器的本机XPath功能.在那些没有本机XPath支持的浏览器上,我们提供了自己的实现.除非您了解各种xpath引擎中的差异,否则这可能会导致一些意外行为.
我想知道在哪里可以找到各种xpath引擎的差异,在哪种情况下我应该使用CSS,以及在哪些XPath中,如果我使用的是IE.谢谢.
我tree.xpath过去常常遍历所有有趣的 HTML 元素,但我需要能够判断当前元素是否属于某个 CSS 类。
from lxml import html
mypage = """
<div class="otherclass exampleclass">some</div>
<div class="otherclass">things</div>
<div class="exampleclass">are</div>
<div class="otherclass">better</div>
<div>left</div>"""
tree = html.fromstring(mypage)
for item in tree.xpath( "//div" ):
print("testing")
#if "exampleclass" in item.getListOfClasses():
# print("foo")
#else:
# print("bar")
Run Code Online (Sandbox Code Playgroud)
整体结构应保持不变。
检查当前div是否有exampleclass课程的快速方法是什么?
在上面的例子中,item是lxml.html.HtmlElement类,它具有属性,classes但我不明白这是什么意思:
classes
围绕“class”属性的类似集合的包装器。获取方法:
unreachable.classes(self)- 围绕“类”属性的类似集合的包装器。设置方法:
unreachable.classes(self, classes)
它返回一个lxml.html.Classes对象,该对象有一个__iter__方法,结果证明iter()有效。所以我构造了这段代码:
for item in tree.xpath( "//div" )
match = …Run Code Online (Sandbox Code Playgroud) 我想获得classname(.class)的Xpath选择器.所以基本上,我想知道如何选择[attr~ = value]
所以,如果我有一个元素
<div class="class1 class2 class3"></div>
<div class="class1"></div>
Run Code Online (Sandbox Code Playgroud)
我想选择.class1,它应该返回两个div.[@ class ='class1']不起作用,因为它不会选择第一个div.
我遵循了How can I find an element by CSS class with XPath? 它提供了用于按类名选择元素的选择器。问题是,当我使用它时,它会检索到一个空结果“[]”,而且我实际上知道在馈送到 scrapy shell 的 url 中有一个名为“zoomWindow”的 div。

我的尝试:
scrapy shell "http://www.niceicdirect.com/epages/NICShop.sf/secAlIVFGjzzf2/?ObjectPath=/Shops/NICShop/Products/5696"
response.xpath("//*[contains(@class, 'zoomWindow')]")
Run Code Online (Sandbox Code Playgroud)
我查看了许多提供各种选择器的资源。就我而言,该元素只有一个类,因此我使用了使用“concat”的版本,但不起作用并被丢弃。
我在虚拟机中安装了 ubuntu 和 scrapy,只是为了确保这不是我在 Windows 上安装的错误,但我在 ubuntu 上的尝试得到了相同的结果。
我不知道还能尝试什么,你能看到选择器中的任何拼写错误吗?
我想要恢复下表中的号码:\n站点
\n\n<table class="table table-hover table-inx">\n <tbody><tr>\n </tr>\n <tr>\n </tr>\n <tr>\n </tr>\n <tr>\n <td class=""><label for="RentNet">Miete (netto)</label></td>\n <td>478,28 \xe2\x82\xac</td>\n </tr>\n <tr>\n </tr>\n <tr>\n </tr>\n <tr>\n <td class=""><label for="Rooms">Zimmer</label></td>\n <td>4</td>\n </tr>\n </tbody></table>\nRun Code Online (Sandbox Code Playgroud)\n\n我想发生这种奇怪的格式是因为表条目是可选的。我使用driver.find_element_by_css_selector("table.table.table-hover")进入表格,我看到如何轻松地迭代标签<tr>。但是我如何找到第二个<td>保存数据的,在><tr>中?\n是否有比“查找唯一具有一位数字的 td 字段”或加载详细信息页面更优雅的方法?<label for="Rooms"
这个类似的问题对我没有帮助,因为有问题的标签有一个 id
\n\n编辑:
\n\n我刚刚发现在相关问题的答案中发布了一个非常有用的 Xpath/CSS 选择器备忘单:它包含引用子/父、下一个表条目等的方法
\n我正在获取一个HTML页面并尝试获取它的一些内容以在表格视图中显示它.在文档之后我尝试了NSXMLDocument和NSXmlParser,但是无法让他们中的任何一个给我正确的数据:-(
我想要废弃的页面是http://www.instapaper.com/u
我正在使用的代码是
NSXMLDocument * doc = [[NSXMLDocument alloc]
initWithXMLString: data
options: NSXMLDocumentTidyHTML
error: &error];
NSArray* rows = [doc nodesForXPath:@"//div[class='tableViewCell']" error:&error];
Run Code Online (Sandbox Code Playgroud)
用class = tableViewCell获取DIV.
如果我只搜索// div我会收到很多,但按类过滤似乎不起作用:-(
知道我做错了什么吗?
谢谢你的帮助,米格尔
xpath ×6
python ×3
selenium ×3
css ×2
html ×2
class ×1
java ×1
label ×1
lxml ×1
objective-c ×1
php ×1
python-3.x ×1
scrapy ×1
scrapy-shell ×1
web ×1
web-crawler ×1
web-scraping ×1
webdriver ×1
xml ×1