[英]How would I scroll container within website using Selnium in Python?
[英]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.