请问一个关于爬虫的问题

2017-09-22 21:04:09 +08:00
 saximi
在爬取某网站时,要根据页面上的选择页控件接着爬取下一个页面,但是控件中下一页的网址并没有直接给出来,而是形如这样的源码:3  其中的 queryListByPage 应该是点击“ 3 ”这个页码的方框时会触发的函数。我想用 selenium.webdriver 和 PhantomJS 来模拟点击页码并进入下一页面的动作,我写了如下的语句: 
nextpageButton = driver.find_element_by_name(response.xpath('a/@click').extract()) 
nextpageButton.click() 

我面临的问题如下: 
1、上面的语句是否可以实现模拟点击下一页页码按钮的效果 
2、如果上面语句可以模拟点击下一页,那么执行完毕后,是否还要有加载下一页面的动作?也就是说还要执行诸如 driver.get(下一页网址) 的语句?并且下一页面的网址要如何获取,有什么函数可以直接返回这个网址么? 
恳请指点,感谢! 

2448 次点击
所在节点    Python
8 条回复
cdwyd
2017-09-22 21:09:41 +08:00
手动点一下看看真正的请求是什么去抓就行
brightguo
2017-09-22 21:12:45 +08:00
0.应该是的
1.不需要再 get
2.如果能 get 何必要虚拟点击,囧~
saximi
2017-09-22 21:26:51 +08:00
@brightguo 不知为何,我的部分代码没有正确显示出来,我重新贴一下我的完整问题吧。

在爬取某网站时,要根据页面上的选择页控件接着爬取下一个页面,但是控件中下一页的网址并没有直接给出来,而是形如这样的源码:<a onclick="queryListByPage('3')">3</a>
其中的 queryListByPage 应该是点击“ 3 ”这个页码的方框时会触发的函数。我想用 selenium.webdriver 和 PhantomJS 来模拟点击页码并进入下一页面的动作,我写了如下的语句:
nextpageButton = driver.find_element_by_name(response.xpath('a/@onclick').extract())
nextpageButton.click()

我面临的问题如下:
1、上面的语句是否可以实现模拟点击下一页页码按钮的效果
2、如果上面语句可以模拟点击下一页,那么执行完毕后,是否还要有加载下一页面的动作?也就是说还要执行诸如 driver.get(下一页网址) 的语句?并且下一页面的网址要如何获取,有什么函数可以直接返回这个网址么?
saximi
2017-09-22 21:28:51 +08:00
@brightguo 假如 nextpageButton.click() 这个语句就等同于 driver.get(下一页网址) 这个语句的效果,那么请问,包含下一个页面内容的对象是什么? 应该不是 response 了吧?
brightguo
2017-09-24 11:02:31 +08:00
1.那部分内容可能是 js 渲染的,你得等待一会----可以用个循环( time.sleep(1)一直检测那个元素出来没,出来了再做后面解析
2.nextpageButton 我没那么写过,我最多直接用 driver.find_element_by_xpath,你那么套我不清楚找的对不对
3.及时模拟点击了,后面有些内容可能也要睡一会才出现的(重新获取 driver.page_source )
4.极力请使用 ChromeDriver,可以直接看到界面----每句语句的效果。phantomjs 已经没人维护了~
saximi
2017-09-24 18:51:43 +08:00
@brightguo 用 phantomJS 是为了起到无界面浏览器的效果,不知 ChromeDriver 可以起到同样效果么?
dsg001
2017-09-24 19:00:15 +08:00
nextpageButton = driver.find_element_by_xpath('a/@onclick')
nextpageButton.click()
如果是 ajax 加载,则 time.sleep(10)

phantomJS 已经被放弃了,chrome 60 以上的版本支持 headless 模式,可以在调试时使用界面,生产时使用 headless
Marsss
2017-09-29 08:53:40 +08:00
import pdb
pdb.set_trace()

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/392938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX