繁体   English   中英

我如何使用lxml和python遍历网站上某个div中的所有div?

[英]Using lxml and python how would I loop through all the divs within a div on a website?

为了好玩,我试图用python编写一个脚本,该脚本遍历给定subreddit主页上的所有帖子。 我有以下代码:

from lxml import html
import requests

subredditURL = "https://www.reddit.com/r/" + "pics/"
subredditPage = requests.get(subredditURL)
subredditTree = html.fromstring(subredditPage.content)
subreddit_rows_xpath = subredditTree.xpath('//*[@id="siteTable"]')

for div in subreddit_rows_xpath:
    print(div)

现在我认为for循环将打印出与我正在查看的页面上的帖子一样多的div。 我认为对于典型的reddit subreddit的首页来说,这将是25个帖子。 我认为这可行的原因是当我手动检查siteTable div时,似乎在siteTable div中包含25个具有x_paths且具有以下格式的div序列:

//*[@id="thing_t3_63fuuy"]

其中id似乎是一个随机字符串,并且首页上的每个帖子都有一个div,其中包含我可以探讨的帖子的相关信息。

而不是打印出25格,上面的代码返回:

<Element div at 0x110669f70>

仅意味着一个div,而不是我预期的25。 我要怎么处理这个错误?

这是我正在探索的URL链接是否有帮助: https : //www.reddit.com/r/pics/

表达式subredditTree.xpath('//*[@id="siteTable"]')返回仅包含1个元素的列表。 因此,使用以下命令对其进行迭代:

for div in subreddit_rows_xpath:
    print(div)

仅输出1个元素,因为仅此而已。 如果要遍历subreddit_rows_xpath下的所有div元素,则可以使用:

subreddit_table_divs = subredditTree.xpath('//*[@id="siteTable"]//div')
for div in subreddit_table_divs:
    print(div)

但是,我想您不仅仅需要看起来像<Element div at 0x99999999999>的一堆线。 您可能需要标题或帖子的链接。

要获得标题,您需要向下钻取两个级别的链接:

subreddit_titles = subredditTree.xpath(
    '//*[@id="siteTable"]//div[@class="entry unvoted"]'
    '/p/a[@data-event-action="title"]/text()'
)

要获取图像的链接,它是相同的路径,只需获取href属性。

subreddit_links = subredditTree.xpath(
    '//*[@id="siteTable"]//div[@class="entry unvoted"]'
    '/p/a[@data-event-action="title"]/@href'
)

暂无
暂无

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

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