编程语言
首页 > 编程语言> > Python爬虫(主要是scrapy框架)

Python爬虫(主要是scrapy框架)

作者:互联网

一、IP代理池(比较简陋,后续更新)

验证ip,proxies用的是两个协议,http和https都要有

import re

import requests

url = 'https://tool.lu/ip'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62'
}
proxies ={
    'http':'47.243.190.108:7890',
    'https':'47.243.190.108:7890'
}
res = requests.get(url=url,headers=headers,proxies=proxies,timeout=3).text
ip = re.search(r'[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}',res,flags=re.S).group(0)
print(ip)

二、python爬虫之scrapy框架

先贴一张图

在这里插入图片描述

基本命令

scrapy startproject myspider
cd myspider
scrapy genspider -t crawl SpiderName  DomaimName

ps:上面加的参数 -t crawl 是创建crawlspider,里面的Rule方法可以帮助提取url
例:笔趣阁,全站爬取

scrapy crawl SpiderName  
scrapy stratproject myspider

response的一些返回值和参数

在这里插入图片描述

scrapy基本用法

设置run文件(setting同级)

from scrapy import cmdline

cmdline.execute('scrapy crawl xt'.split())

重写方法 start_requests

在这里插入图片描述

更改中间件middlewares

随机UA代理

fake_useragent 是一个包,pip install一下

from fake_useragent import UserAgent
class DouyinxingtuUserAgentDownloaderMiddleware:
    def process_request(self, request, spider):
        agent = UserAgent(path='fake_useragent_0.1.11.json').random
        request.headers['User-Agent'] = agent

设置用户代理ip

class DouyinxingtuProxiesDownloaderMiddleware:
    def process_request(self, request, spider):
        porixList = getIp()
        self.porix = random.choice(porixList) # 116.208.24.72:8118
        request.meta['proxy'] ='https://'+self.porix
        print(request.meta)
    # 如果报错,就返回
    def process_exception(self, request, exception, spider):
        print('删除数据库的值')
        return request

设置cookie(scrapy中间件里设置cookie要的是字典格式)

在这里插入图片描述
上面是直接从浏览器复制的,将字符串转换成字典

class DouyinxingtuCookieDownloaderMiddleware:
    def process_request(self, request, spider):
        cookie = self.get_cookie()
        cookies = dict([l.split("=", 1) for l in cookie.split("; ")])
        request.cookies=cookies

基于管道存储

先打开setting配置

这个是pipelines里面的类名
在这里插入图片描述

管道类配置

# mysql数据库存储
class DouyinxingtuPipelineMysqlSave:
    fp=None
    def open_spider(self,spider):
        print('爬虫开始')
        # 连接数据库

        pass

    def process_item(self,item,spider):
        print(item) # 这个是items中的item
        pass

    def close_spider(self,spider):
        print('爬虫结束')
        pass

个人习惯,引入items中的类

标签:item,Python,self,request,爬虫,spider,url,scrapy
来源: https://blog.csdn.net/zhi___you/article/details/122406327