python爬虫基础小案例, scrapy框架,思路和经验你全都有。

2023-11-12

目录

一、scrapy介绍

二、爬取步骤        

三、代码 

 1、创建爬虫项目    scrapy startproject 项目名字                注意: 项目名字不能出现中文,也不能以数字开头。

 2、创建爬虫文件

          3.进入itmes.py

 4.进入spiders

 5.进入pipelines.py 

 四、运行scrapy 文件 

一、scrapy介绍

        简单介绍一下scrapy吧。

        Scrapy 框架是一个基于Twisted的一个异步处理爬虫框架,应用范围非常的广泛,常用于数据采集、网络监测,以及自动化测试等。

        Scrapy 框架主要由五大组件组成,它们分别是:

  1. 调度器(Scheduler) :它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。
  2. 下载器(Downloader) :负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理
  3. 爬虫(Spider):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)
  4. 实体管道(Item Pipeline):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.
  5. Scrapy引擎(Scrapy Engine):负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

这么说大家可能还是不太明白,直接上图(此图来自一位bilibili的up主):

 步骤如下:

        注:红色字体部分是给下一个步骤的数据

 spiders url --》引擎(Scrapy Engine)url --》调度器 (Scheduler)请求 --》引擎(Scrapy Engine)请求 --》下载器(Downloader) 请求 --》互联网 数据 --》引擎(Scrapy Engine)数据 --》spiders 解析数据结果 --》引擎(Scrapy Engine)if(就交给管道下载数据)  if(有 url 则重复上面步骤) 注意的一点是连个可以同时存在也可以单独存在

话不多说,直接开始干!!!!

二、爬取步骤        

        这次要爬取的是当当网中的电子书

点击此处,进入网址,可以看到很多的书。而我们需要的是数据:书的图片,书名,作者,价格

 

1.爬取思路

首先查看有多少页,会发现,这个网站没有页数,究其原因,是一个滚动条的 ajax 请求,当滚动条滑倒最底下的时候,就发出一条请求。说这么一堆可能听不懂,上图。

 这时候你会发现里面多了很多条请求,我们直接看到最上面一条,因为是ajax的请求,肯定是一个json的一个嵌套格式,直接打开英文是”response“,中文是“响应”,我的是中文所以就点击响应,看看有没有我们所需要的数据。

有数据吧,那就是他了。 

http://e.dangdang.com/media/api.go?action=mediaCategoryLeaf&promotionType=1&deviceSerialNo=html5&macAddr=html5&channelType=html5&permanentId=20220424124301850188613824148624365&returnType=json&channelId=70000&clientVersionNo=6.8.0&platformSource=DDDS-P&fromPlatform=106&deviceType=pconline&token=&start=63&end=83&category=QCWX&dimension=dd_sale&order=0

复制url 放到搜索栏里面在进行请求一次,检验一下是不是正确的。

结果如下,密密麻麻的数据,有密集恐惧症的估计得没,而我们今天的任务就是从这些数据中提取出我们想要的数据。

 

 要多页爬取,所以我们还要刚才一样在操作一次,下一条的请求URL,和这条url有什么区别。

这时候就有两条url 

http://e.dangdang.com/media/api.go?action=mediaCategoryLeaf&promotionType=1&deviceSerialNo=html5&macAddr=html5&channelType=html5&permanentId=20220424124301850188613824148624365&returnType=json&channelId=70000&clientVersionNo=6.8.0&platformSource=DDDS-P&fromPlatform=106&deviceType=pconline&token=&start=63&end=83&category=QCWX&dimension=dd_sale&order=0
http://e.dangdang.com/media/api.go?action=mediaCategoryLeaf&promotionType=1&deviceSerialNo=html5&macAddr=html5&channelType=html5&permanentId=20220424124301850188613824148624365&returnType=json&channelId=70000&clientVersionNo=6.8.0&platformSource=DDDS-P&fromPlatform=106&deviceType=pconline&token=&start=84&end=104&category=QCWX&dimension=dd_sale&order=0

 规律找到了,很简单。start(从第几本书开始) end(结束的那一本书)

思路有了,那就开始写代码

三、代码 

在python 中的 Terminal  也就是终端中,创建scrapy框架

 

1、创建爬虫项目    scrapy startproject 项目名字
                注意: 项目名字不能出现中文,也不能以数字开头。

 项目结构如下:玩过django的人应该都知道

 

 2、创建爬虫文件

        在spiders文件夹中创建爬虫文件 
               cd 项目的名字\项目的名字\spiders
        进入spiders文件后创建爬虫文件:
        创建爬虫文件         
               scrapy genspider 爬虫文件的名字 要爬取的网页

注:URL记得用 ” “包起来不然可能会报错 

创建成功后会出现,也就是我们刚刚创建的文件夹 

 

 3.进入itmes.py

 数据取到后接下里就是定义数据结构了

 

import scrapy


class ScrapyDyttCsdnItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    
    #定义好数据结构
    name = scrapy.Field()   #书名
    author = scrapy.Field() #作者
    imgSrc = scrapy.Field() #图片
    price = scrapy.Field()  #价格
    pass

 4.进入spiders

        进入我们刚刚创建好的文件 spiders文件下的  dytt.py

进入该文件,会发现,看注释

import scrapy


class DyttSpider(scrapy.Spider):
    name = 'dytt'
    #链接范围,不在该范围内的url请求,都会报错,一般只写域名
    allowed_domains = ['e.dangdang.com']
    #执行文件请求的url,也就是我们创建文件的是给的url,
    #但是又不懂是不是,这是因为框架内部的原因弄的,大家不用在意,把刚才的url重新复制在里面就可以了。
#改一下strat 和 end 这两个是前面提过的 strat=0  和 end=20
#意思也就是从索引0开始,一直到索引20,也就是21本书
    start_urls = ['http://e.dangdang.com/media/api.go?action=mediaCategoryLeaf&promotionType=1&deviceSerialNo=html5&macAddr=html5&channelType=html5&permanentId=20220424124301850188613824148624365&returnType=json&channelId=70000&clientVersionNo=6.8.0&platformSource=DDDS-P&fromPlatform=106&deviceType=pconline&token=&start=0&end=20&category=QCWX&dimension=dd_sale&order=0']

    def parse(self, response):
#页面返回来的数据全在response 中,response.text 看看数据有没有获取到
        print(response.text)

 

3、运行爬虫代码
                scrapy crawl 爬虫文件的名字
                eg: scrapy crawl dytt

 

 密密麻麻的数据已经获取到了,说明代码已经好了,接下来就是解析数据了,看到这些数据别说是我们了,就算哪些最牛逼的大神都头痛,有没有好的办法呢?当然是有的。

 既然书是从strat开始 end结束,那能不能只获取一本书呢。

试试,改   strat=0 和 end=0 只获取一本书

在浏览器输入 根改后的链接

http://e.dangdang.com/media/api.go?action=mediaCategoryLeaf&promotionType=1&deviceSerialNo=html5&macAddr=html5&channelType=html5&permanentId=20220424124301850188613824148624365&returnType=json&channelId=70000&clientVersionNo=6.8.0&platformSource=DDDS-P&fromPlatform=106&deviceType=pconline&token=&start=0&end=0&category=QCWX&dimension=dd_sale&order=0

结果如下,这样是不是就舒服多了,接下来就是了解 json 数据结构 ,找到我们需要数据的位置

 结构已近给你们找好了,如果你们也想自己找的话可以试试,挺好玩的。

print(doc['data']["saleList"][0]['mediaList'][0]["authorPenname"])  #作者
print(doc['data']["saleList"][0]['mediaList'][0]["coverPic"])       #图片
print(doc['data']["saleList"][0]['mediaList'][0]["title"])          #书名字
print(doc['data']["saleList"][0]['mediaList'][0]["lowestPrice"])    #价格

 那接下来就是解析数据了

import scrapy
import json

class DyttSpider(scrapy.Spider):
    name = 'dytt'
    #链接范围,不在该范围内的url请求,都会报错,一般只写域名
    allowed_domains = ['e.dangdang.com']
    #执行文件请求的url,也就是我们创建文件的是给的url,
    #但是又不懂是不是,这是因为框架内部的原因弄的,大家不用在意,把刚才的url重新复制在里面就可以了。
    #改一下strat 和 end 这两个是前面提过的 strat=0  和 end=20
    #   意思也就是从索引0开始,一直到索引20,也就是21本书
    start_urls = ['http://e.dangdang.com/media/api.go?action=mediaCategoryLeaf&promotionType=1&deviceSerialNo=html5&macAddr=html5&channelType=html5&permanentId=20220424124301850188613824148624365&returnType=json&channelId=70000&clientVersionNo=6.8.0&platformSource=DDDS-P&fromPlatform=106&deviceType=pconline&token=&start=0&end=20&category=QCWX&dimension=dd_sale&order=0']

    def parse(self, response):
        
        
        json_list = json.loads(response.text)
        #  json_list['data']['saleList']  获取每一本书的信息

        for i in json_list['data']['saleList']: #遍历每一本书 获取其中需要的数据
            author = i['mediaList'][0]["authorPenname"]
            imgSrc = i['mediaList'][0]["coverPic"]
            name = i['mediaList'][0]["title"]
            price =i['mediaList'][0]["lowestPrice"]
            print(author,name,imgSrc,price)

获取数据如下:

        这样是不是就舒服多了 

接下来把解析好的数据 给 items.py 中的类,让items.py 给数据进行封装 dict 字典格式

import scrapy
import json


class DyttSpider(scrapy.Spider):
    name = 'dytt'
    #链接范围,不在该范围内的url请求,都会报错,一般只写域名
    allowed_domains = ['e.dangdang.com']
    #执行文件请求的url,也就是我们创建文件的是给的url,
    #但是又不懂是不是,这是因为框架内部的原因弄的,大家不用在意,把刚才的url重新复制在里面就可以了。
    #改一下strat 和 end 这两个是前面提过的 strat=0  和 end=20
    #   意思也就是从索引0开始,一直到索引20,也就是21本书
    start_urls = ['http://e.dangdang.com/media/api.go?action=mediaCategoryLeaf&promotionType=1&deviceSerialNo=html5&macAddr=html5&channelType=html5&permanentId=20220424124301850188613824148624365&returnType=json&channelId=70000&clientVersionNo=6.8.0&platformSource=DDDS-P&fromPlatform=106&deviceType=pconline&token=&start=0&end=20&category=QCWX&dimension=dd_sale&order=0']

    def parse(self, response):


        json_list = json.loads(response.text)
        #  json_list['data']['saleList']  获取每一本书的信息

        for i in json_list['data']['saleList']: #遍历每一本书 获取其中需要的数据
            author = i['mediaList'][0]["authorPenname"]
            imgSrc = i['mediaList'][0]["coverPic"]
            name = i['mediaList'][0]["title"]
            price =i['mediaList'][0]["lowestPrice"]

            #导入items.py 中的类 也就是我们刚刚定义好的数据结构 会定义成一个字典格式的数据结构
            from scrapy_dytt_csdn.items import ScrapyDyttCsdnItem
            book = ScrapyDyttCsdnItem(author=author,imgSrc=imgSrc,name=name,price=price)

 最后就是下载数据,需要交给管道,pipelines.py 文件

import scrapy
import json


class DyttSpider(scrapy.Spider):
    name = 'dytt'
    #链接范围,不在该范围内的url请求,都会报错,一般只写域名
    allowed_domains = ['e.dangdang.com']
    #执行文件请求的url,也就是我们创建文件的是给的url,
    #但是又不懂是不是,这是因为框架内部的原因弄的,大家不用在意,把刚才的url重新复制在里面就可以了。
    #改一下strat 和 end 这两个是前面提过的 strat=0  和 end=20
    #   意思也就是从索引0开始,一直到索引20,也就是21本书
    start_urls = ['http://e.dangdang.com/media/api.go?action=mediaCategoryLeaf&promotionType=1&deviceSerialNo=html5&macAddr=html5&channelType=html5&permanentId=20220424124301850188613824148624365&returnType=json&channelId=70000&clientVersionNo=6.8.0&platformSource=DDDS-P&fromPlatform=106&deviceType=pconline&token=&start=0&end=20&category=QCWX&dimension=dd_sale&order=0']

    def parse(self, response):


        json_list = json.loads(response.text)
        #  json_list['data']['saleList']  获取每一本书的信息

        for i in json_list['data']['saleList']: #遍历每一本书 获取其中需要的数据
            author = i['mediaList'][0]["authorPenname"]
            imgSrc = i['mediaList'][0]["coverPic"]
            name = i['mediaList'][0]["title"]
            price =i['mediaList'][0]["lowestPrice"]

            #导入items.py 中的类 也就是我们刚刚定义好的数据结构 会定义成一个字典格式的数据结构
            from scrapy_dytt_csdn.items import ScrapyDyttCsdnItem
            book = ScrapyDyttCsdnItem(author=author,imgSrc=imgSrc,name=name,price=price)

            #把数据交给管道  piplines.py  进行数据的下载
            yield book

5.进入pipelines.py 

进行数据的下载

class ScrapyDyttCsdnPipeline:

    #程序执行前第一个开始此方法,该方法是框架内置方法,方法名一定不能修改,否则会报错
    def open_spider(self):
        #打开文件
        self.fp = open("book.json",'w',encoding='utf-8')

    def process_item(self, item, spider):
        #item 中就是 dytt.py 文件中 yield book 中返回的数据
        #注意 item 要转化成字符串类型,否则会报错
        self.fp.write(str(item))
        return item

    def closer_spider(self):
        #关闭文件
        self.fp.close()

让后在settings.py 文件中把这一行的注释解开,也就是打开管道,管道不带开,数据怎么进去呢,更别提下载数据了。

为了方便大家寻找  进入settings 文件后 按住 crat+f    进行搜索这个  ITEM_PIPELINES,就能找到了

 四、运行scrapy 文件 

在终端 输入  

scrapy crawl 爬虫文件的名字

       scrapy crawl dytt 

输入之后进行按下回车 就可以了

最后文件book.json 文件会在  spiders文件夹下

 

 总共105条,一本书5条数据 

105/5=21(本)

所有数据都在这里了,一点都没漏,Perfect!!!

还有不懂的地方可以评论,看到了会及时回复的,谢谢大家的支持。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python爬虫基础小案例, scrapy框架,思路和经验你全都有。 的相关文章

  • 从Python中的对象列表中提取属性列表

    我有一个uniformpython 中的对象列表 class myClass object def init self attr self attr attr self other None objs myClass i for i in
  • 获得熊猫按群体连续几周的最长连续记录

    目前我正在处理不同主题的每周数据 但可能会有一些没有数据的长连续 所以 我想做的就是保留每个连续几周的最长连续id 我的数据如下所示 id week 1 8 1 15 1 60 1 61 1 62 2 10 2 11 2 12 2 13 2
  • del 在 Python 中什么时候有用?

    我实在想不出为什么 Python 需要del关键字 大多数语言似乎没有类似的关键字 例如 我们可以分配一个变量 而不是删除一个变量None到它 当从字典中删除时 del可以添加方法 有理由保留吗del在Python中 还是Python前垃圾
  • Django 自引用关系?

    我正在尝试创建模型页面 页面也应该能够有 子页面 我的模型代码如下使Python崩溃 http pastie org private butthk1aaeb3pmh7mmag1g在我的Mac python 2 6 1 和Ubuntu 10
  • 当鼠标悬停时使用 matplotlib 注释绘图的线条[重复]

    这个问题在这里已经有答案了 我想在鼠标悬停时在绘图上注释不同的线 这里用点进行相同的操作当鼠标悬停在 matplotlib 中的某个点上时可以显示标签吗 https stackoverflow com questions 7908636 p
  • 为什么这个“[::-1]”在Python中返回一个反向列表? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 切片表示法的良好入门指南 https stackoverflow com questions 509211 good primer for python slice notation P
  • 来自 yahoo 的 python lxml etree 小程序信息

    雅虎财经更新了他们的网站 我有一个 lxml etree 脚本 用于提取分析师建议 然而现在 分析师的建议已经存在 但只是以图表的形式出现 你可以看到一个例子这一页 https finance yahoo com quote CSX ana
  • Tastypie:GET 的身份验证和 POST 的匿名

    我使用 Django Tastypie 来管理我的用户集合 是否可以允许匿名用户在 API 中发布 在某个端点创建新用户时 并限制经过身份验证的用户仅获取自己的用户 而不是所有用户 感谢您的帮助 我发现最简单的事情就是对我正在使用的身份验证
  • OSMNX - 边缘的哪个“部分”被认为是最近的

    我正在使用 OSMNX 中的 returned edges 函数 我不清楚在进行此计算时使用边缘的哪个 部分 它是边缘的任何部分吗 是中间点吗 对于网络中的长边来说 这会产生很大的差异 这取决于您如何参数化该函数 来自nearest edg
  • 如何在Python中生成0-1矩阵的所有可能组合?

    如何生成大小为 K N 的 0 1 矩阵的所有可能组合 例如 如果我取 K 2 和 N 2 我会得到以下组合 combination 1 0 0 0 0 combination 2 1 0 0 0 combination 3 0 1 0 0
  • 由 asyncio.new_event_loop 创建的事件循环挂起

    以下代码只是挂起而不打印任何内容 import asyncio async def foo loop print foo loop stop loop asyncio new event loop asyncio ensure future
  • 在 ubuntu 12.04 上安装 ReviewBoard

    我正在尝试使用 easy install 在 ubuntu 12 04 上安装 ReviewBoard http www reviewboard org docs manual 1 7 admin installation linux ht
  • Python 中 Javascript 的 reduce()、map() 和 filter() 的等价物是什么?

    Python 的等价物是什么 Javascript function wordParts currentPart lastPart return currentPart lastPart word Che mis try console l
  • 如何在 Ansible 中更新嵌套变量

    我有一些额外的信息 例如数据库连接详细信息等 存储在 etc ansible facts d environment fact 中 这些可以作为变量使用 例如ansible local environment database name 更
  • 从线程队列中获取所有项目

    我有一个线程将结果写入队列 在另一个线程 GUI 中 我定期 在 IDLE 事件中 检查队列中是否有结果 如下所示 def queue get all q items while 1 try items append q get nowai
  • 检查Python multiprocessing.Connection 的实例吗?

    Connection对象是在打开时创建的multiprocessing Pipe 然而 尚不清楚如何检查一个对象是否是一个实例Connection 在Python3 3 4 3 3 3 2 中 检测Connection我可以 from mu
  • Python:正则表达式 findall

    我使用 python 正则表达式从给定字符串中提取某些值 这是我的字符串 mystring txt sometext somemore text here some other text course course1 Id Name mar
  • python chaco轴标签时间格式

    在 Enthought 的 Chaco 中 TimeFormatter类用于格式化刻度的时间字符串 标签 有没有办法指定时间格式 类似于time strftime 源代码现在将显示月份和日期时的格式硬编码为美国风格 MMDD 我想添加一些灵
  • 命名空间与常规包

    命名空间 Python 包之间有什么区别 没有 init py 和一个常规的Python包 有一个 init py 特别是当 init py普通包裹是空的吗 我很好奇 因为最近我忘记了 init py在我制作的包中 我从未注意到任何问题 事
  • Doctest 返回失败,但“预期”和“得到”完美匹配

    我正在尝试做列表部分的第二个练习 http www openbookproject net thinkcs python english2e ch09 html exercises 如何像计算机科学家一样思考 一书的内容 我基本上必须将给定

随机推荐

  • 前端语言——JS

    目录 JS概述 在HTML中嵌入JS的方式 JS变量 函数 局部全局变量 变量 函数 局部与全局变量 JS数据类型和typeof运算符 JS常用事件 注册事件的两种方式 利用onload解决代码顺序问题 正确代码顺序的模板 捕捉回车键 运算
  • 突然 网站访问好慢。。。 检查 解决

    C gt tracert d www beihai365 com Tracing route to web1 beihai365 com 222 216 28 18 over a maximum of 30 hops 1 Request t
  • [运维] 龙蜥操作系统常用功能笔记

    安装图形界面 安装gnome桌面 sudo dnf install gdm 设置图形界面为默认启动界面 sudo systemctl set default graphical target 设置由图形界面模式更改为命令行模式 sudo s
  • Centos7 永久关闭Selinux以及网络配置

    一 永久关闭Selinux 查看Selinux状态 此为未关闭 2 临时关闭Selinux 重启后会自动开启 3 永久关闭Selinux 3 1进入vi etc selinux conf 3 2把里面改成selinux disabled 4
  • Shell条件判断

    转自 http yanwang blog 51cto com 1123232 382807 b file 若文件存在且是一个块特殊文件 则为真 c file 若文件存在且是一个字符特殊文件 则为真 d file 若文件存在且是一个目录 则为
  • keil提示:missing ';' before 'xxx'

    然鹅并找不到哪里少了分号 可能是alarm的问题 故将包含 alarm的头文件包含进来 解决问题 一般这个报错不是缺少分号 是定义那行有些类型头文件识别不了 keil报这个错误
  • Linux安装Zabbix

    首先配置好yum仓库 root zabbix yum install epel release y root zabbix yum clean all root zabbix yum makecache 1 安装基本工具和编译工具 root
  • 海康车牌识别一体机语音播报、led显示(java版)

    LED显示和语音播报需要用到命令穿透 直接调接口不好实现 返回状态是成功实际没有相应 穿透命令的接口路径特别坑 路径中间必须加一个空格 不加空格一直提示参数有误 调用示例 PUT后边必须带空格 要不然会失败 特别坑的是海康的文档里也不说明
  • 毕业设计——基于STM32+OV7670的图像采集车牌识别(终极篇:车牌识别)

    书接上文 https blog csdn net m0 59113542 article details 123592010 spm 1001 2014 3001 5502 本篇文章主要介绍如何对采集到的图像处理 进行车牌号的识别 本车牌识
  • warning: #61-D: integer operation result is out of range

    integer operation result is out of range Set GPIO Direction define DHT22 IO IN GPIOA gt CRL 0X0FFFFFFF GPIOA gt CRL 8 lt
  • 12-4 volatile

    1 使用情况 volatile 与 12 3 中的代码重排序有关 在 12 3 的第三小节 由于添加 set CMAKE C FLAGS O3 导致编译器对汇编指令进行了优化 此时可使用 volatile 关键字 确保被修饰的变量对应的汇编
  • 解决caffe运行mobilenet报错:registry.count(type) == 1 (0 vs. 1) Unknown layer type: DepthwiseConvolution

    ubuntu下使用caffe运行mobilenet时由于缺少相关层容易报错 这时需要自己下载相关层的头文件和源文件 再次编译caffe 针对问题registry count type 1 0 vs 1 Unknown layer type
  • 1128: 课程平均分java

    import java util Scanner public class Main public static void main String args Scanner input new Scanner System in int m
  • 数据采集系统下位机与上位机代码

    数据采集系统下位机与上位机代码 下位机采用开发板来完成 AD9226模数转换芯片 最大65MHz采样 12bit量化 双通道采样 上位机可以设置下位机的采样深度最大采集8K 采样率 1M 10M 20M 50M 可以保存波形 后续可以进行带
  • Linux 常用命令汇总(详细版)

    Linux 文件系统 Linux 的文件系统是采用层级式的树状目录结构 在此结构中的最上层是根目录 然后再次目录下再创建其他的目录 目录结构 以下是对这些目录的解释 目录结构 含义 root 该目录为系统管理员 也称作超级权限者的用户主目录
  • 关于Date与LocalDateTime的区别

    很多小伙伴有问我 date与localdatetime的区别 今天我就来细致的讲讲 首先呢 date是util包下的类 他有着自己的格式 类似于这个样子 Tue Sep 10 09 34 04 CST 2019 可以看到时间格式是比较不友好
  • 自定义类型 (位段、枚举、联合体)

    文章目录 位段 1 什么是位段 2 位段的内存分配 3 位段的跨平台问题 枚举 1 枚举类型的定义 2 枚举的优点 3 枚举的使用 联合 共用体 1 联合类型的定义 2 联合的特点 3 联合体大小的计算 位段 1 什么是位段 位段的声明和结
  • linux下创建用户线程和内核线程

    在linux下 线程都是通过pthread create创建的 线程分为用户线程和内核线程 在windows下 用户线程大都是通过线程库提供的 用户线程依附在内核线程上 一般是一个和多个用户线程对应一个内核线程 内核线程通过线程库完成用户线
  • 常用的验证网址的正则表达式

    常用的验证网址的正则表达式 正则表达式 包含http 正则表达式 包含 www 正则表达式 包含http https ftp 正则表达式 包含 www 正则表达式 包含http http ftp https w w w w 正则表达式 包含
  • python爬虫基础小案例, scrapy框架,思路和经验你全都有。

    目录 一 scrapy介绍 二 爬取步骤 三 代码 1 创建爬虫项目 scrapy startproject 项目名字 注意 项目名字不能出现中文 也不能以数字开头 2 创建爬虫文件 3 进入itmes py 4 进入spiders 5 进