Python基础知识回顾及scrapy框架爬虫基础

1.函数
  函数参数:必须 默认 关键 可变
  函数种类:外部 内部 匿名 lambda
  装饰函数:@语法糖
  函数总是要返回的 ,若没有return,None总是被返回
 
2.面向对象:
  对象:已存在,可被使用的实例 万物皆对象
  类:描述其他实例信息的对象
  方法:定义其他实例行为的对象
3.与函数区别:
  函数可以直接调用
  方法需要依赖类对象才能调用
 
@staticmethod 类似函数
@classmethod 类方法
属性:定义其他实例特征的对象
stu=Student()
stu.jump=lambda x: print("你跳了{0}米“.format(x))
stu.jump(1)
 
4.常用模块:
  re(正则) xml time threading socket random pickle (序列化) os sys
  pdk:----python sdk
  第三方: scrapy pandas numpy plot..
  scrapy:爬虫框架 特点:工业化重量级
      xpath:通过path风格的表达式来解析xml HTML
      /html/body[](取属性)//(后代)div ,/当前路径
 
scrapy框架爬虫基础案例
  对蜘蛛spider的编写和解析
import  scrapy  #导入scrapy 的模块
class QuotesSpider(scrapy.Spider): #类方法继承scrapy模块的spider
    name = 'kgc'            #蜘蛛名 (后面需要执行方式之一所需)
    start_urls=['http://www.kgc.cn/',] #所需要爬虫的资源进口
    def parse(self, response):  #parse方法定义爬虫的规则
        datas=response.css('h2.headline-title~ul>li>p>a::text').extract()#应用css样式方法,寻找对应的爬取模块
        for d in datas:
            print(d)

在命令窗口terminal中输入运行命令:

scrapy runspider spid文件名

输出结果可以获取相应内容。

对于连接路径内容的获取如下:

import  scrapy  #导入scrapy 的模块
class QuotesSpider(scrapy.Spider): #类方法继承scrapy模块的spider
    name = 'kgc'            #蜘蛛名 (后面需要执行方式之一所需)
    start_urls=['http://www.kgc.cn/',] #所需要爬虫的资源进口
    def parse(self, response):  #parse方法定义爬虫的规则
        hrefs = response.css('h2.headline-title~ul>li>p>a::attr("href")').extract()#获取的是对应的连接路径
        for url in hrefs:
            yield  response.follow(url,self.ta)#使用yield生成器,通过response的follow方法,传参分别为得到的路径和得到内容的方法

    def ta(self,response):#定义当前对象所需要获取内容的方法
        titl=response.css('div.essay_top>h6::text').extract_first()#应用css样式获取内容标题
        author=response.css('div.essay_card.f1>span::text').extract_first()#获取内容的作者
        yield {                 #生成器每次调用得到内容
            "title":titl,       #获取的以字典格式输出
            "author":author
        }

同样执行spider运行语句:

scrapy runspider spider文件名

如果在运行得到结果的过程中,遇到无法输出或者乱码问题,可通过生成json文件进行运行:

步骤如下:

将spider文件生成json文件,执行语句为:

scrapy runspider spider文件名  -o  文件名.json

然后对其进行解析:

import json            #引入json模块
with open("test.json") as f :#读取文件并重命名f
    da=json.load(f) #文件重新加载得到da
    for s in da:  #循环输出内容
        print(s)

运行文件即可得到相应内容。后续内容持续更新。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/qianshuixianyu/p/9210448.html