作者 chickengod (鸡大侠)
标题 Re: Selenium爬取资料出错
时间 Thu Feb 11 20:20:09 2021
───────────────────────────────────────
※ 引述《code0093 (DADY)》之铭言:
: 我要爬工商名录的资料
: 网址
: https://dmz26.moea.gov.tw/GMWeb/investigate/InvestigateFactory.aspx
: 程式码贴在GitHub
: https://github.com/san60708/helppppppp/blob/main/ss
: 不知道为什麽我用find_elements找到资料後再用for把资料抓出来。他只会抓第一行...
: 不知道哪里出错了
: 请大大协助,感谢~
你需要解决网页的弹出视窗
https://i.imgur.com/cSgaX12.jpeg
不然下一次的 driver.get() 好像会因为这样被卡住
然後就一直死在 exception 的 while loop
以下的程式可以在遇到 alert 弹出视窗 exception 的时候按确定
from selenium.common.exceptions import UnexpectedAlertPresentException
# 此处用来取代原本的 except
except UnexpectedAlertPresentException as ex:
print("Exception has been thrown. " + str(ex))
alert = driver.switch_to.alert
alert.accept()
"""
Exception has been thrown. Alert Text: None
Message: unexpected alert open: {Alert text : 查无资料}
"""
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.25.137.58 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1613046017.A.FB6.html
※ 编辑: chickengod (114.25.137.58 台湾), 02/12/2021 04:03:31
1F:推 code0093: 感谢大大回覆 02/12 17:32
2F:→ code0093: 我先测试某一页,暂且忽略跳出的方块 02/12 17:33
5F:→ code0093: 程式26行开始爬取资料 02/12 17:34
7F:→ code0093: 程式只爬得出第一行...然後这个页面总共683笔,他就重 02/12 17:35
8F:→ code0093: 复爬683次 02/12 17:35
Hi 根据 selenium 文件
https://tinyurl.com/2de8zwvf
find_elements_by_xpath() return "WebElement" list
https://tinyurl.com/15na3djs
WebElement 是一个 class
你可以使用内建的 property 比如 .text 得到文字
data = driver.find_elements_by_xpath("//div//table[@width='90%']/tbody")
print(data[0].text)
print(data[1].text)
类似这样
"""
工厂登记编号 630209 ...
工厂登记编号 630206 ...
"""
※ 编辑: chickengod (114.25.137.58 台湾), 02/12/2021 23:22:04
9F:推 code0093: 感谢大大。但是我现在用for单纯印出data.text是正常的 02/14 00:37
10F:→ code0093: 但是如果data.find就又是错误的 如图 02/14 00:37
13F:→ code0093: 如果是webelement的话 那我要再更深入超多特定资料为什 02/14 00:39
14F:→ code0093: 麽会只印出第一笔呢..还是是我电脑问题 02/14 00:39
15F:→ code0093: 感谢大大协助 02/14 00:39
17F:推 code0093: 我换另一种方法写就没问题了,但是我还是很疑惑为何用fo 02/14 00:49
18F:→ code0093: r不行... 02/14 00:49
19F:→ chickengod: 我猜可能跟这个有关? 02/14 02:39
21F:→ chickengod: 会根据 xpath 写法选择抓整页或者相对於元素的位置 02/14 02:39
22F:→ chickengod: 如果都是长的像绝对路径的xpath 02/14 02:51
23F:→ chickengod: 大概就不管目前元素在哪 一律抓第一个 02/14 02:51
24F:→ chickengod: 也许就能解释为什麽你会遇到这情况 02/14 02:51
25F:→ chickengod: 不过我是觉得以都能达到目的来说 02/14 02:51
26F:→ chickengod: 直接抓 .text 存下来 02/14 02:51
27F:→ chickengod: 再一次针对全部字串处理会不会执行比较快 02/14 02:51
28F:→ chickengod: 毕竟 selenium 还要控制一个浏览器 多少会影响效能 02/14 02:51
29F:推 code0093: 了解,感谢大大的用心回答 02/14 22:50
30F:→ code0093: 目前我就要先抓text下来再分解字串 效率确实快很多 02/14 22:51
31F:→ chickengod: ( ̄▽ ̄) okder ~ 02/14 23:41
32F:推 kshskghs: xpath用绝对路径较好 03/06 13:54