爬虫scrapy框架中那些坑

由爬取静态网页过渡至动态网页

一、静态网页学习


爬虫库的下载真的是个坑来的,适合初学者学习爬虫的一个网站:

http://www.scrapyd.cn/doc/181.html   这里要感谢网站开发者

Scrapy库不支持Python3,网上有各种教程去应对配置,但是对于没有耐心的,还是不要轻易尝试,不然真的很容易奔溃。安装scrapy库最好使用是工具Anaconda,一键式操作(但为了保险起见,最好一开始以管理员身份运行,绕开一些不必要的麻烦)

学习安装借鉴 scrapy 中文1.5文档(同样是上面那个学习网址)

亲测,win10完美安装,需要主要的是下载时要注意版本问题

爬虫的一些全局命令,这里了解一下就行,知道创建一个项目,如何取运行一个项目就可以了

scrapy startproject(创建项目)、

scrapy crawl XX(运行XX蜘蛛,这里的蜘蛛是程序中创建的蜘蛛名)

安装完成需要的工具后,创建项目的话,在上面那个网址已经讲得非常明白了

这里给一个scrapy框架,有兴趣的可以继续了解一下




Scraoy使用request对象来爬去web站点

Request对象有spiders对象产生,经由scheduler传送Downloader,Downloader执行request并返回response给spiders

Request对象常用两个参数 url,callback

url:用于请求的url

callback:指定一个回调函数(回调函数不懂的,建议去了解一下,很有意思,这里就不再贴上去了)

爬取网页数据数据

静态爬取网页学习到此结束,其实爬取静态网页真的没什么用处,除非像下载图片那种需求,想要大量实时数据做对比还是最好学会爬取动态网页


二、动态网页学习


下面学习如何抓取选股宝网站中”利好“的票(选股宝网站是一个js动态网站)

首先又是下载工具,其实初学python就是不断地去利用工具、利用库来达到你的目的

自动翻页工具下载配置

https://www.cnblogs.com/michael-cheng/p/6885705.html

关于自动翻页工具,其实就下载一个自动测试化工具,由于这里我只需要知道怎么用它就行,所以就没有深入

但是需要注意的是这里下载驱动时要注意版本问题,不要下错了,查找浏览器版本百度有教程。

程序中的问题

Drive.Chorm(“浏览器驱动路径”)

通过python启动浏览器时最好把本地的驱动程序目录加入到括号内,防止报错,路径错误,如果想不想加路径的话,方法是把驱动放到程序的目录下,这样编译的话,程序就能找到打开浏览器的驱动

自动翻页,网上提供了很多种方法,有使用id名,class,xpath去定位元素进行翻页:

本人在这了也是走了不少弯路,我承认是我还太菜了,作为一个初学者,我百度搜了两天,把各网页都给翻了一遍。

有多种方法可以提取整个动态网站的数据,中间有提到用html语言的规则取提取,但是作为一个没接触过网页语言的小白,我怎么利用

 

继而发现了selenium框架,也就是一个代替你双手,打开浏览器,并且还会自动翻页的东西,从此打开了新世界的大门。

整个程序设计思路

先让页面加载出尽可能多的页面,方法就是让page在range函数中循环(什么叫尽可能多,就是你想多加载多少就加载多少,只要网页有,只要你想要,因为我在程序中放了个变量,任你处置)

网页中的”点击加载更多“就是我最头疼的地方,在这里查找了一天,完全没效果,后来才发现我完全搞错了

target = self.driver.find_element_by_xpath("//*[@class='home-news-footer']")    #定位到点击元素

find_element_by_xpath()就是这个函数中的元素,我搞错了,然后在这里转了一整天,如果要应用到爬取其它网页,使用它来爬取js动态网页,只需要将class变量改了就行(目前测试的几个网站是这样,如果无法使用,请使用其它方法)。find_element_by_xpath()该函数的使用方法,网上也有一大堆大神的解释

最后就是利用自动测试工具咯,这里我们只用其中两个方法,需要实现其它功能就要靠自己多去查找!!!

execute_script()这个方法是自动拉取滚动条
click() 处理点击事件方法

然后再用parse()函数,进行数据处理,parse()函数是一个神奇的函数,在程序中是一个会自动执行的函数,在前面的scrapy中文网中有介绍,想了解的可以去看看,它是一个会自动执行的函数

代码源程序

import scrapy
import time
from selenium import webdriver


class XG(scrapy.Spider):
    name = 'XG'
    start_urls = ['https://www.xuangubao.cn/']
    def __init__(self):
        url = "https://www.xuangubao.cn/"
        self.driver = webdriver.Chrome()
        self.driver.get(url)
        target = self.driver.find_element_by_xpath("//*[@class='home-news-footer']")    #定位到点击元素
        js = "var q=document.documentElement.scrollTop=100000"             #滚动条加载到底部
        for page in range(10):
            self.driver.execute_script(js)    #开始代替双手进行工作
            time.sleep(2)
            target.click()    #点击加载更多
   
    def parse(self, response):
        data = response.css('div.news-item-main'#得到一个选择列表
        for v in data:
            text = v.css('span.bullish-and-bear.bullish::text').extract()  # 提取数据
            if text is not None:
                tag = v.css('.news-item-intro-topic::text').extract()
                str=' '.join(tag)
                text = ' '.join(text)
                fileName = '%s.txt' % text  # 爬取的内容存入文件,文件名为:数据名字.txt
                f = open(fileName, "a+"# 追加写入文件
                f.write(text)  # 写入数据
                f.write('\n')
                f.write(str)
                f.write('\n----------------------------------------------------------------------------------------------------------------------\n')
                f.close()  # 关闭文件操作

 其实程序也相当简单,没有什么难点,注释也相当清楚,就不再进行解释了,主要是想把自己过程中遇到的麻烦共享出来,看下能不能帮助其它人。第一次写博客,有很多地方做得不好,请见谅

程序运行结果

这里以爬取5页为例,5页中就只出现一个利好的股票,如果人工去查找所有利好的股票,近视估计得加深。







猜你喜欢

转载自blog.csdn.net/weixin_41245153/article/details/80748611