老孙的爬虫(三)------使用selenium+chrome 使用关键字爬取js渲染的数据

本文介绍了两种方法从免费PDF网站抓取关键字搜索结果。方法一是利用selenium改变URL参数爬取数据,但效率较低;方法二是通过分析网络请求,直接请求JS数据源,但需解析JSON。作者还提到了使用MongoDB存储关键字,并讨论了XPath在爬虫中的重要性。
摘要由CSDN通过智能技术生成

目标:输入关键字爬取      http://www.freefullpdf.com/#gsc.tab=0       内pdf文件的网址(本网站为国外pdf文件网站,需要代理)

方法一:在浏览器上输入这个url,然后在这个网址的搜索框中随意输入一个关键字会发现网址栏的url会变为           http://www.freefullpdf.com/#gsc.tab=0&gsc.q=python&gsc.sort=&gsc.page=1,   再输入其他关键字发现其中“q=python"这里就是我输入的关键字,而”page=1“是控制翻页,于是通过通过改变这两个参数来让selenium爬取数据

缺点:这种方法确实可以爬取出js渲染的数据,但是效率堪忧。后面我又尝试啦        ”selenium+无界面浏览器 “      进行爬取,但是结果也并不理想

方法二:在Network中找到js数据的请求网址,直接使用 ”requests.get()“ 直接请求,再解析获取的js数据

 

接下来我们来看下我的实际代码部分:

方法一:

from selenium import webdriver
from pymongo import MongoClient
import hashlib

#这里我从MongoDB数据库中取出关键字,然后作为参数查询(关于MongoDB的相关python的使用请自行查找)

conn=MongoClient("获取关键字数据库的ip地址",27017)#取关键字的数据库
db=conn.Runoob
my_set=db.Runoob

conn2=MongoClient("存数据的数据库",27017)#存数据的数据库
db2=conn2.test4
my_set2=db2.url_set2


def download_data(keyword,page):    #里面封装了存数据的内容,参数传入关键字keyword,页数page
    browser = webdriver.Chrome()    #chrome对应的驱动版本直接百度下载后放入python安装目录下的Script文件夹内
    browser.get("http://www.freefullpdf.com/#gsc.tab=0&gsc.q="+keyword+"&gsc.sort=&gsc.page="+str(page))
    node_list = browser.find_elements_by_xpath("//div[@class='gs-title']/a[@class='gs-title']")  # 获取href所在的节点(该节点包含啦文件url与title),返回list
    # print(node_list)
    print(len(node_list))

#href的存放我使用啦MD5加密,其实三句话就可以搞定

#上面我通过find_elements_by_xpath  ,即xpath获取节点列表,除最后一页每页数据都是10个,所以这里可以直接使用下标获取单个节点,然后通过get_attribute('href')获取节点的href属性(注意MD5这里放入update内的数据需要encode())

#这里我获取节点的方法采用的是xpath,我个人认为这个爬取的过程中比较重要的就是获取节点这部分,我过j几天会单独发布一个关于xpath/bs4/pyquery的基础使用

if len(node_list)==11:  #除最后一页每页数据都是10个,所以不是最后一页的数据使用批量存入
    MD5_href0 = hashlib.md5()    #构造对象
    MD5_href0.update(node_list[0].get_attribute('href').encode())
    MD5_href1 = hashlib.md5()
    MD5_href1.update(node_list[1].get_attribute('href').encode())
    MD5_href2 = hashlib.md5()
    MD5_href2.update(node_list[2].get_attribute('href').encode())
    MD5_href3 = hashlib.md5()
    MD5_href3.update(node_list[3].get_attribute('href').encode())
    MD5_href4 = hashlib.md5()
    MD5_href4.update(node_list[4].get_attribute('href').encode())
    MD5_href5 = hashlib.md5()
    MD5_href5.update(node_list[5].get_attribute('href').encode())
    MD5_href6 = hashlib.md5()
    MD5_href6.update(node_list[6].get_attribute('href').encode())
    MD5_href7 = hashlib.md5()
    MD5_href7.update(node_list[7].get_attribute('href').
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值