繁体   English   中英

我如何摆脱未寻找的数据?

[英]How can I get rid of unsought data?

我已经在python中编写了一些代码来抓取每个标题下的一些标题和内容。 除最后一个容器外,刮板运行良好。 我希望解析每个容器(而不是最后一个容器)中的字段。 在这里,我用这个词container意味着fieldset标签以及其中的内容。 但是,我该怎么做才能摆脱上一个容器中的数据,并继续使用css选择器解析其他容器中的数据,我重复css选择器?

这是我尝试过的:

from lxml.html import fromstring
import requests

res  = requests.get("http://www.webscantest.com/").text
soup = fromstring(res)
for data in soup.cssselect("fieldset"):
    title = data.cssselect("legend")[0].text
    content = [item.text.strip() for item in data.cssselect("a")]
    print(title,' '.join(content))

为了摆脱最后一个注意到div标签的容器中的数据,我for data in soup.cssselect("fieldset:not(div)"):使用了像这样的选择器for data in soup.cssselect("fieldset:not(div)"):但仍然相同。 但是,我本可以for data in soup.cssselect("fieldset")[:-1]:使用for data in soup.cssselect("fieldset")[:-1]:以获得所需的结果,但是我想摆脱的容器不必始终位于最后一个位置,否则它们可能会重复出现次内。

这是我要查找的数据所在的元素(前两个相同,但最后一个包含div标签):

<fieldset>
    <legend>JS tests:</legend>
        <a href="soap/demo/">SOAP SPA page</a>
        <a href="rest/demo/">REST SPA page</a>
        <a href="react/">ReactJS test page</a>
</fieldset>

<fieldset>
    <legend>JS tests:</legend>
        <a href="soap/demo/">SOAP SPA page</a>
        <a href="rest/demo/">REST SPA page</a>
        <a href="react/">ReactJS test page</a>
</fieldset>

<fieldset>
    <legend>Basic tests:</legend>
        <div>
            <select name="redirect" onchange="javascript: gotoselect();">
                <option value="pickone">Pick a category </option>
                <option value="hrs">HTTP Response Splitting Tests</option>
                <option value="payment_analysis">Parameter Analysis Tests</option>
            </select>
        </div>
        <a href="jsmenu/auto_osrun.php">OS Command Inject Tests</a>
        <a href="jsmenu/cookie_set_coffeepits.php">Java Grinder Tests</a>
        <a href="jsmenu/dynalink_myfiles.php">Directory Browse Tests</a>
        <a href="jsmenu/dynalink_rfplaces.php">Resource Finder Tests</a>
</fieldset>

您还可以将xpath与lxml一起使用,在这种情况下它很有用,您的代码应如下所示:

from lxml.html import fromstring
import requests

res  = requests.get("http://www.webscantest.com/").text
soup = fromstring(res)
for data in soup.xpath("//fieldset[not(div)]"):
    title = data.cssselect("legend")[0].text
    content = [item.text.strip() for item in data.cssselect("a")]
    print(title,' '.join(content))

只有没有直接div子级的元素才会被匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM