万能爬虫框架

对于爬虫大部分情况下都是请求头的构造很难,难就难在你必须分析js代码,看看header中有那些验证信息,这些验证信息是怎么生成的,然后再在Python中写出生成的方法,这样就能构造出正确的请求头,有了正确的请求头,就一定能请求成功,但是对于很多网站,这样的方式在过于复杂,不是一个好的解决方案,所幸的是还有一种方案是万能的,它可以爬取任何网页和任何操作,这个方案就是使用谷歌或者火狐提供的自动化测试工具,谷歌的是Chromedriver.exe,这个程序打开是一个命令框,并且它带了很多操作浏览器的命令,可以令你完全模拟人去使用网页的操作,但是这还不够,你需要将这个程序做成一个自动化的脚本,这样才能爬取大量的内容,然而在Python中已经至少有一个库实现这些,比如selenium,但事实上你也可以自己将Chromediver给封装起来,也可以使用c++将其做成一些桌面程序等等,下面给出一个Python下爬取某网站图片的例子,

首先必须先下载Chromediver.exe接着将其放入当前Python环境的script目录下即可


```python
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import requests
from selenium.webdriver.support import wait
from selenium.webdriver.support import expected_conditions
 
 
chrome_options = webdriver.ChromeOptions()
# prefs = {
#     "profile.managed_default_content_settings.images":1,
#     'profile.managed_default_content_settings.javascript':1,
#     'profile.managed_default_content_settings.css':2,
 
#对Chrome进行一些设置,比如关闭脚本,不加载图片等等,1-不开启;2-开启
prefs = {
    'profile.default_content_setting_values': {
        'images': 1,
        'javascript': 2,
    }
}
chrome_options.headless=True #设置无头模式,就是没有界面,也就意味着不去渲染css和style,可以价快速度
chrome_options.add_experimental_option("prefs",prefs)
for i in chrome_options.to_capabilities().items():
    print(i)
browser = webdriver.Chrome(chrome_options=chrome_options)#创建一个Chromediver并传入一个设置
# browser = webdriver.Chrome()
 
 
# dcap = dict(DesiredCapabilities.PHANTOMJS)  # 设置userAgent
# dcap["phantomjs.page.settings.userAgent"] = (
#     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36")
# browser = webdriver.PhantomJS(executable_path='phantomjs.exe', desired_capabilities=dcap)  # 加载网址
# browser.set_window_size(0,0)
# browser.img
script='''
var clear=function () {
    console.log('**********************')
    var img_list=document.getElementsByTagName('img');
    for (var i = 0; i <img_list.length;i++){
        var img=img_list[i];
        var url=img.getAttribute('src');
        if (url !==''){
            img.setAttribute('src','');
        }
    }
};
setInterval(clear) ;
'''
print('load 。。。。')
browser.execute_script(script)#执行屏蔽图片的脚本,也可以屏蔽其他内容,这里也可以使用谷歌的拓展插件取实现。
browser.get('http://www.taobao.com')  # 打开网址
print('load finished')
# browser.set_window_size(640,320)
# browser.execute_async_script(script)
 
# browser.get()
browser.implicitly_wait(10)#设置网页加载的最大等待时间,并非固定时间
browser.save_screenshot("1.png")  # 截图保存
print('start find......')
 
# print(browser.page_source)
'''开始获取数据,但是此时网页未必加载完毕,所以需要循环取判断目标元素是否加载完毕'''
import time
while 1:
    a=browser.find_elements_by_class_name('img-wrapper')
    print('finding...', len(a))
    if len(a)>10:
        for i,e in enumerate(a):
            src=e.find_element_by_tag_name('img').get_property('src')
            response=requests.get(src)
            print(src)
            with open(str(i)+'.jpg','wb') as f:
                f.write(response.content)
        break
    time.sleep(0.5)
browser.quit()  # 关闭浏览器。当出现异常时记得在任务浏览器中关闭PhantomJS,因为会有多个PhantomJS在运行状态,影响电脑性能

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值