【发布时间】:2019-03-10 07:09:37
【问题描述】:
我有一个脚本,它可以加载一个页面并从多个容器中保存一堆数据 ID。然后我想打开新的 url,将这些数据 id 附加到 url 的末尾。对于每个 url,我想找到所有的 href 并将它们与特定链接列表进行比较,如果其中任何一个匹配,我想将该链接和其他一些详细信息保存到表中。
我已经设法让它打开带有附加数据 id 的 url,但是当我尝试在新页面中搜索元素时,如果我再次尝试从汤中查找全部,它要么从解析的第一个 url 中提取它们,要么当我尝试运行另一个 html.parser 时,我经常收到此错误。
ResultSet 对象没有“findAll”属性。您可能将项目列表视为单个项目。当你打算调用 find() 时,你调用了 find_all() 吗?
是不能运行另一个解析器还是我做错了什么?
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as soup
from selenium.webdriver.common.action_chains import ActionChains
url = "http://csgo.exchange/id/76561197999004010#x"
driver = webdriver.Firefox()
driver.get(url)
import time
time.sleep(15)
html = driver.page_source
soup = soup(html, "html.parser")
containers = soup.findAll("div",{"class":"vItem"})
print(len(containers))
data_ids = [] # Make a list to hold the data-id's
for container in containers:
test = container.attrs["data-id"]
data_ids.append(test) # add data-id's to the list
print(str(test))
for id in data_ids:
url2 = "http://csgo.exchange/item/" + id
driver.get(url2)
import time
time.sleep(2)
soup2 = soup(html, "html.parser")
containers2 = soup2.findAll("div",{"class":"bar"})
print(str(containers2))
with open('scraped.txt', 'w', encoding="utf-8") as file:
for id in data_ids:
file.write(str(id)+'\n') # write every data-id to a new line
【问题讨论】:
-
第一个 URL (csgo.exchange/id/76561197999004010#x) 的页面源没有任何具有 vItem 类的 div,这是我注意到的第一件事。您如何在第一次获得任何结果?对于您的问题,一两个示例 ID 可能会有所帮助,因为这样我们就可以转到 URL 并查看页面源代码。
-
大约有 885 个具有 vItem 类的 div。我在获取 ID 时没有任何问题。以前帮助我解决上一期问题的人也没有。但这里有一些例子。 15653916980 15653916960 15631554103
-
我假设当你去加载它没有完全加载的页面。有时页面会挂起,有时会立即打开。我计划让它等到元素存在后再继续,但我现在不知道该怎么做,所以 15 秒睡眠是一个占位符。
-
我真正想拉的是每个页面上的流历史记录中的所有href,就像这样。 csgo.exchange/item/15653916980 然后我想将其中的每一个与链接列表进行比较,看看它们是否匹配。
标签: python selenium findall html-parser