为什么我从web抓取中得到不一致的结果?

kpbpu008  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(315)

我在从网站上抓取数据时遇到问题。问题可能出在visualstudio代码上,我使用的是“code runner”扩展。这是我第一次使用BeautifulSoup和selenium,所以问题也可能出在我的代码上。我上周五就开始了,在经历了一些困难之后,我在周六想出了一个解决办法。我的代码是:

import requests
from bs4 import BeautifulSoup, SoupStrainer
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

parcelID = 1014100000 #this is a random parcelID I grabbed from the site
url = 'https://www.manateepao.com/parcel/?parid={}'.format(parcelID)

driver = webdriver.Chrome()
driver.get(url)

html = driver.execute_script("return document.documentElement.outerHTML")

# was getting encoding error with print(html). replaced character that was giving me trouble

newHTML = html.replace(u"\u2715", "*")

soupFilter = SoupStrainer('div', {'id': 'ownerContentScollContainer'})
soup = BeautifulSoup(newHTML, 'html.parser', parse_only=soupFilter)

webparcelID = soup.find_all('b')
lColumn = soup.find_all('div', {'class' : 'col-sm-2 m-0 p-0 text-sm-right'})
rColumn = soup.find_all('div', {'class' : 'col-sm m-0 p-0 ml-2'})

parcel_Dict = {}
for i in range(len(lColumn)):
    parcel_Dict[i] = {lColumn[i].string: rColumn[i].string}

# This is to test if I got any results or not

print(parcel_Dict)

driver.close()
driver.quit()

我希望每次刮一页都能找到:
包裹id。这是它自己的粗体,b,标记。
所有权和邮寄地址。所有权应始终位于地块目录[1],邮寄地址应始终位于地块目录[3]。
我运行代码,有时得到一个结果,有时得到一个空字典。
谢谢你的帮助。

92dk7w1h

92dk7w1h1#

我通过添加以下代码行解决了自己的问题

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.XPATH, "//div[@id='ownerContentScollContainer']")))

我一直等到ownercontentscrollcontainer完全加载之后,才继续执行其余的代码。
这篇文章和这篇文章帮助我找出我可能会出错的地方。我使用本教程了解如何使用适当的xpath。

相关问题