记录一次快速实现的python爬虫,想要抓取中财网数据引擎的新三板板块下面所有股票的公司档案,网址为http://data.cfi.cn/data_ndkA0A1934A1935A1986A1995.html。

  比较简单的网站不同的页码的链接也不同,可以通过观察链接的变化找出规律,然后生成全部页码对应的链接再分别抓取,但是这个网站在换页的时候链接是没有变化的,因此打算去观察一下点击第二页时的请求

  发现使用的是get的请求方法,并且请求里有curpage这个参数,貌似控制着不同页数,于是改动了请求链接中的这个参数值为其他数值发现并没有变化,于是决定换一种方法,就是我们标题中提到的使用selenium+beautifulsoup实现模拟点击网页中的下一页按钮来实现翻页,并分别抓取网页里的内容。

  首先我们先做一下准备工作,安装一下需要的包,打开命令行,直接pip install selenium和pip install beautifulsoup4

  然后就是下载安装chromedriver的驱动,网址如下https://sites.google.com/a/chromium.org/chromedriver/downloads,记得配置下环境变量或者直接安装在工作目录下。(还可以使用IE、phantomJS等)

  这里我们先抓取每一个股票对应的主页链接,代码如下(使用python2):

 1 # -*- coding: utf-8 -*-
2 from selenium import webdriver
3 from bs4 import BeautifulSoup
4 import sys
5 reload(sys)
6 sys.setdefaultencoding('utf-8')
7
8 def crawl(url):
9 driver = webdriver.Chrome()
10 driver.get(url)
11 page = 0
12 lst=[]
13 with open('./url.txt','a') as f:
14 while page < 234:
15 soup = BeautifulSoup(driver.page_source, "html.parser")
16 print(soup)
17 urls_tag = soup.find_all('a',target='_blank')
18 print(urls_tag)
19 for i in urls_tag:
20 if i['href'] not in lst:
21 f.write(i['href']+'\n')
22 lst.append(i['href'])
23 driver.find_element_by_xpath("//a[contains(text(),'下一页')]").click()
24 time.sleep(2)
25 return 'Finished'
26 def main():
27 url = 'http://data.cfi.cn/cfidata.aspx?sortfd=&sortway=&curpage=2&fr=content&ndk=A0A1934A1935A1986A1995&xztj=&mystock='
28 crawl(url)
29 if __name__ == '__main__':
30 main()

    运行代码发现总是报错:

    这里报错的意思是找不到想要找的按钮。

    于是我们去查看一下网页源代码:

    发现网页分为不同的frame,所以我们猜想应该需要跳转frame,我们需要抓取的链接处于的frame的name为“content”,所以我们添加一行代码:driver.switch_to.frame('content')

def crawl(url):
driver = webdriver.Chrome()
driver.get(url)
driver.switch_to.frame('content')
page = 0
lst=[]
with open('./url.txt','a') as f:
while page < 234:
soup = BeautifulSoup(driver.page_source, "html.parser")
print(soup)
urls_tag = soup.find_all('a',target='_blank')
print(urls_tag)
for i in urls_tag:
if i['href'] not in lst:
f.write(i['href']+'\n')
lst.append(i['href'])
driver.find_element_by_xpath("//a[contains(text(),'下一页')]").click()
time.sleep(2)
return 'Finished'

    至此,运行成:

参考博文链接:          http://unclechen.github.io/2016/12/11/python%E5%88%A9%E7%94%A8beautifulsoup+selenium%E8%87%AA%E5%8A%A8%E7%BF%BB%E9%A1%B5%E6%8A%93%E5%8F%96%E7%BD%91%E9%A1%B5%E5%86%85%E5%AE%B9/

http://www.cnblogs.com/liyuhang/p/6661835.html

使用selenium webdriver+beautifulsoup+跳转frame,实现模拟点击网页下一页按钮,抓取网页数据的更多相关文章

  1. 使用Selenium+firefox抓取网页指定firefox_profile后的问题

    from: https://blog.csdn.net/chufazhe/article/details/51145834 摘要:在使用selenium和firefox抓取网页指定firefox_pr ...

  2. [Python爬虫] 之八:Selenium +phantomjs抓取微博数据

    基本思路:在登录状态下,打开首页,利用高级搜索框输入需要查询的条件,点击搜索链接进行搜索.如果数据有多页,每页数据是20条件,读取页数 然后循环页数,对每页数据进行抓取数据. 在实践过程中发现一个问题 ...

  3. [Python爬虫] 之四:Selenium 抓取微博数据

    抓取代码: # coding=utf-8import osimport refrom selenium import webdriverimport selenium.webdriver.suppor ...

  4. selenium配合phantomjs实现爬虫功能,并把抓取的数据写入excel

    # -*- coding: UTF-8 -*- ''' Created on 2016年5月13日 @author: csxie ''' import datetime from Base impor ...

  5. 利用selenium抓取网页的ajax请求

    部门需要一个自动化脚本,完成web端界面功能的冒烟,并且需要抓取加载页面时的ajax请求,从接口层面判断请求是否成功.查阅了很多资料都没有人有过相关问题的处理经验,在处理过程中也踩了很多坑,所以如果你 ...

  6. php使用curl抓取网页自动跳转问题处理

    问题分析: 请求抓取http://go.com数据: function curlGet($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, ...

  7. python+selenium+webdriver+BeautifulSoup实现自动登录

    from selenium import webdriverimport timefrom bs4 import BeautifulSoupfrom urllib import requestimpo ...

  8. 一、使用 BeautifulSoup抓取网页信息信息

    一.解析网页信息 from bs4 import BeautifulSoup with open('C:/Users/michael/Desktop/Plan-for-combating-master ...

  9. Selenium webdriver 截图 太长截不全的问题

    Selenium webdriver 截图 太长截不全的问题 1.环境 selenium webdriver.net 2.46.0.0 + firefox 37.0.1 + win 8.1 2.问题 ...

随机推荐

  1. allego 输出报告说明

    List of Available Reports Assigned Function Report Lists all assigned functions, sorted by function ...

  2. CentOS文件权限管理

    目录 文件属性 chown更改所有者 chgrp更改所属组 文件权限rwx chmod修改权限 默认权限umask 权限判定的顺序 特殊权限SUID,SGID,sticky 隐藏权限chattr,ls ...

  3. 纳税服务系统【信息发布管理、Ueditor、异步信息交互】

    需求分析 我们现在来到了纳税服务系统的信息发布管理模块,首先我们跟着原型图来进行需求分析把: 一些普通的CRUD,值得一做的就是状态之间的切换了.停用和发布切换. 值得注意的是:在信息内容中,它可以带 ...

  4. hibernate中Query的list和iterator区别

    1.Test_query_list类 public class Test_query_iterator_list { public static void main(String[] args) { ...

  5. php-laravel4.0框架 简单快速入门

    前提必须已经安装好了laravel4.0版本. 写入权限: 安装完 Laravel ,你还需要为web服务器设置 app/storage 目录的写入权限. 目录结构: 安装完框架后,你需要熟悉一下该项 ...

  6. Linux 下安装maven

    1.首先到Maven官网下载安装文件,目前最新版本为3.0.3,下载文件为apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令:2.进入下载文件夹,找到下载的文件,运行 ...

  7. Oracle 每隔5分钟产生2个clsc*.log文件

    环境: OS:HP-UNIX 数据库:11.2.0.4   双机RAC (一)现象 在清理Oracle日志的时候,发现在$ORACLE_HOME/log/{instance_id}/client下面存 ...

  8. Quartz源码——Quartz调度器的Misfire处理规则(四)

    Quartz调度器的Misfire处理规则 调度器的启动和恢复中使用的misfire机制,还需细化! SimpleTrigger的misfire机制 默认的 Trigger.MISFIRE_INSTR ...

  9. EOutOfResources EConvertError is not a valid integer value Unable to insert a line

    is not a valid integer value???project Teclaser_Single.exe raised exception class EOutOfResources wi ...

  10. MySQL优化原理

    前言 说起MySQL的查询优化,相信大家收藏了一堆:不能使用SELECT *.不使用NULL字段.合理创建索引.为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原理 ...