鱼C论坛

 找回密码
 立即注册
查看: 2724|回复: 9

爬虫selenium find问题

[复制链接]
发表于 2017-8-3 13:19:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zkamsk 于 2017-8-3 13:20 编辑

使用selenium抓取网页
  1. items=doc('#J_goodsList .gl-warp .gl-item').items()
  2.     for each in items:
  3.         product={
  4.             'title':each.find('.p-name em').text()
  5.         }
  6.         print(product)
复制代码

以上代码返回值一直是{'title': ''}为空,可是我把html复制成文件在idle中实验时可以正确返回,这是为什么?很苦恼啊
O{PQFZO6E(82{H91`3S$FPT.png

以下是整个程序的源代码
  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.support.ui import WebDriverWait
  4. from selenium.webdriver.support import expected_conditions as EC
  5. from selenium.common.exceptions import TimeoutException
  6. from pyquery import PyQuery as pq
  7. browser=webdriver.Chrome()
  8. wait=WebDriverWait(browser, 20)
  9. def search():
  10.     browser.get('https://www.jd.com/')
  11.     try:
  12.         input = wait.until(
  13.             EC.presence_of_element_located((By.CSS_SELECTOR, "#key"))
  14.         )
  15.         submit=wait.until(
  16.             EC.element_to_be_clickable((By.CSS_SELECTOR, "#search > div > div.form > button"))
  17.         )
  18.         input.send_keys('美食')
  19.         submit.click()
  20.         total = wait.until(
  21.             EC.presence_of_element_located((By.CSS_SELECTOR, '#J_bottomPage > span.p-skip > em:nth-child(1) > b')))
  22.         prase_page()
  23.     except TimeoutException:
  24.         search()

  25. def next_page(page_number):
  26.     next=wait.until(
  27.         EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_topPage > a.fp-next"))
  28.         )
  29.     next.click()
  30.     wait.until(EC.text_to_be_present_in_element(
  31.         (By.CSS_SELECTOR, '#J_topPage > span > b'), str(page_number)))
  32.     prase_page()
  33. def prase_page():
  34.     wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_goodsList .gl-warp .gl-item')))
  35.     html=browser.page_source
  36.     doc=pq(html)
  37.     items=doc('#J_goodsList .gl-warp .gl-item').items()
  38.     for each in items:
  39.         product={
  40.             'title':each.find('.p-name em').text()
  41.         }
  42.         print(product)

  43. def next_2_page(page_number):
  44.     try:
  45.         input = wait.until(
  46.             EC.presence_of_element_located((By.CSS_SELECTOR, "#J_bottomPage > span.p-skip > input"))
  47.         )
  48.         submit = wait.until(
  49.             EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_bottomPage > span.p-skip > a"))
  50.         )
  51.         input.clear()
  52.         input.send_keys(page_number)
  53.         submit.click()
  54.         wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#J_bottomPage > span.p-num > a.curr'),str(page_number)))
  55.     except TimeoutException:
  56.         return next_2_page(page_number)
  57. def main():
  58.     search()
  59.     for each in range(2,5):
  60.         next_page(each)


  61. if __name__=='__main__':
  62.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-3 13:28:38 | 显示全部楼层
  1.     for each in items:
  2.         product={
  3.             'title':each.find('.p-name em').text()
  4.         }
  5.         print(product['title'])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-3 13:34:15 | 显示全部楼层

不是这个,是我用selenium的find定位p-name的子元素em,想要提取它标签的内容each.find('.p-name em').text()可是返回为空,但是当我把整个HTML保存成文件,在IDLE里面实验的时候each.find('.p-name em').text()是可以正确返回的,我不知道这是为什么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-3 14:28:47 | 显示全部楼层
@32269100 数字哥懂这个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-3 14:37:01 | 显示全部楼层
新手·ing 发表于 2017-8-3 14:28
@32269100 数字哥懂这个

怎么@他。。@32269100
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-3 14:38:46 | 显示全部楼层
zkamsk 发表于 2017-8-3 14:37
怎么@他。。@32269100

@32269100
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-8-3 18:48:23 | 显示全部楼层
我用火狐,运行了三次都可以
捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-4 09:38:55 | 显示全部楼层
小锟 发表于 2017-8-3 18:48
我用火狐,运行了三次都可以

那我也换火狐试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-5 15:19:32 | 显示全部楼层
不好意思,看晚了,解决了吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-7 09:06:14 | 显示全部楼层
32269100 发表于 2017-8-5 15:19
不好意思,看晚了,解决了吗?

解决了。谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-22 19:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表