所以我一直在尝试从ZALORA进行网络浏览,似乎selenium一直在废弃重复的数据.......
这是我的代码:
from selenium import webdriver
import time
driver = webdriver.Chrome()
url = 'https://www.zalora.com.hk/men/clothing/shirt/?gender=men&dir=desc&sort=popularity&category_id=31&page=1&enable_visual_sort=1'
driver.get(url)
driver.implicitly_wait(30)
brandname=''
productTitle=''
page=0
while True:
info_brandname = ''
info_product_title = ''
page=page+1
if len(info_brandname) < 99 or len(info_product_title) < 99:
info_brandname = driver.find_elements_by_xpath('//span[@class="b-catalogList__itmBrand fsm txtDark uc js-catalogProductTitle"]')
info_product_title = driver.find_elements_by_xpath('//em[@class="b-catalogList__itmTitle fss"]')
print('info_brandname ' + str(len(info_brandname)) + ' at page ' + str(page))
print('info_product_title ' + str(len(info_product_title)) + ' at page ' + str(page))
else:
print('info_brandname ' + str(len(info_brandname)) + ' at page ' + str(page))
print('info_product_title ' + str(len(info_product_title)) + ' at page ' + str(page))
#some manipulation of the scrapped data
for i in range(len(info_brandname)):
brandname = brandname + '\n' + info_brandname[i].text
productTitle = productTitle + '\n' + info_product_title[i].text
print(brandname.split('\n')[1:])
print(productTitle.split('\n')[1:])
这是我怀疑出错的部分:
#go to the next page before it loops again
try:
test = driver.find_element_by_xpath("//a[@title='Next']")
driver.execute_script("arguments[0].click();", test)
except:
print('there is no next page man...')
time.sleep(2)
print(str(driver.current_url))
driver.close()
编辑:目前,最后一个项目的名称应为&#39; Life8&#39;根据网站的说法,我得到了J.Crew&#39;,我总共报废了1885件物品,而网站上说他们总共只有1847件物品。
页面&#39;当脚本运行时,url实际上正在改变,每个页面上的项目,当我看到自动化在chrome上执行其操作时,一切都正常运行,只有selenium报废的数据很奇怪。
EDIT2:我已经做了一些调查,我监控了webdrive Chrome中的自动化过程,并且发现当我在普通Chrome中正常浏览ZALORA时,webdrive Chrome中的相同网址与同一网址的内容不同,有可能该网站做了一些事情来防止人们报废?
答案 0 :(得分:1)
我认为问题在于您在点击“下一步”按钮后尝试获取新的URL,而URL需要一些时间才能更改,因此每次导航到同一页面时都是如此。
实际上我不知道为什么在每次迭代开始时你需要driver.get(url)
当你已经通过点击下一步切换到下一页...
尝试删除此行driver.get(url)
(将其移出循环)和此url = driver.current_url
另请注意,您只需在脚本中调用driver.implicitly_wait(30)
一次(您可以在driver = webdriver.Chrome()
之后立即调用它),它将应用于所有元素搜索......
答案 1 :(得分:0)
我设法通过将driver = webdriver.Chrome()
更改为driver = webdriver.Firefox()
来填充正确的数据,这解决了我遇到的问题。虽然我不完全确定为什么它解决了这些问题。