懒码农。。。。。。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一、Pip

(1)pip升级

python -m pip install --upgrade pip

(2)查看pip配置文件位置

pip -v config list

(3)pip换源

# 阿里云    
https://mirrors.aliyun.com/pypi/simple/
# 清华大学
https://pypi.tuna.tsinghua.edu.cn/simple/
https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/

单次换源:pip install Scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple

修改配置换源:pip.ini

[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple

二、Scrapy:

(1)安装scrapy报错 Running setup.py install for Twisted ... error:

下载 Twisted‑20.3.0‑cp39‑cp39‑win_amd64.whl  进行安装,地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

pip install C:\python\Twisted-20.3.0-cp39-cp39-win_amd64.whl

(2)框架图

Scrapy Engine(引擎):负责Spiders、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等等
Scheduler(调度器): 负责接收引擎发送过来的requests请求,并按照一定的方式进行整理排列,入队、并等待Scrapy Engine(引擎)来请求时,交给引擎
Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spiders来处理
Spiders(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器)
Item Pipeline:负责处理Spiders中获取到的Item,并进行处理,比如去重,持久化存储
Downloader Middlewares(下载中间件):一个可以自定义扩展下载功能的组件
Spider Middlewares(Spider中间件):一个可以自定义扩展和操作引擎,负责Spiders中间‘通信‘的功能组件(比如进入Spiders的Responses和从Spiders出去的Requests)

(3)scrapy命令:

创建scrapy项目:scrapy startproject 项目名称 

查看可用的创建爬虫模板(basic、crawl、csvfeed、xmlfeed):scrapy genspider -l

创建爬虫:scrapy genspider -t basic toutiaoCrawl toutiao.com

执行爬虫:scrapy crawl toutiaoCrawl

测试(在spiders将response写到文件):

    def parse(self, response):
        with open('d:/abin.html',"w+",encoding=response.encoding) as f:
            f.seek(0)
            f.truncate()
            f.write(response.body.decode(response.encoding))
        pass

(4)setting.py 

# 是否遵循robots协议
ROBOTSTXT_OBEY = False
# 是否启用cookie
# COOKIES_ENABLED = False

# 默认request header
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8',
#'Referer': 'https://www.baidu.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',
}

# 下载同一个网站下一个页面前需要等待的时间
# DOWNLOAD_DELAY = 2
# 启用后,当从相同的网站获取数据时,Scrapy将会等待一个随机的值,延迟时间为0.5到1.5之间的一个随机值乘以DOWNLOAD_DELAY
# RANDOMIZE_DOWNLOAD_DELAY = True
# 对单个网站进行并发请求的最大值
# CONCURRENT_REQUESTS_PER_DOMAIN = 16
# 对单个IP进行并发请求的最大值,如果非0,则忽略CONCURRENT_REQUESTS_PER_DOMAIN设定,使用该IP限制设定
# CONCURRENT_REQUESTS_PER_IP = 16

# 自动限速扩展
# 默认为False,设置为True可以启用该扩展
# AUTOTHROTTLE_ENABLED = True
# 初始下载延迟,单位为秒
# AUTOTHROTTLE_START_DELAY = 5
# 设置在高延迟情况下的下载延迟,单位为秒
# AUTOTHROTTLE_MAX_DELAY = 60
# 用于启动Debug模式,默认为False
# AUTOTHROTTLE_DEBUG = False

(5)日志

settings.py:

# 日志
LOG_ENABLED = True
# 日志编码
LOG_ENCODING = 'utf-8'
# 日志文件,默认为 None
LOG_FILE = '.\log\scrapy.log'
# CRITICAL(严重错误)、ERROR(一般错误)、WARNING(警告)、INFO(一般信息)、DEBUG(调试信息) 
LOG_LEVEL = 'DEBUG'
# 进程所有的标准输出(及错误)将会被重定向到log中(例如print,print默认级别是Info)
LOG_STDOUT = True

输出日志的py文件:

import logging

    def parse(self, response):
        logging.info(response.body.decode(response.encoding))
        pass

 按日期输出日志(settings.py):

import datetime
to_day = datetime.datetime.now()
#......
#......
#......
LOG_FILE = '.\log\scrapy_{}_{}_{}.log'.format(to_day.year, to_day.month,to_day.day)

日志格式:文件、行号、函数等(settings.py)

# 日志日期格式
LOG_DATEFORMAT = "%Y-%m-%d %H:%M:%S"
# 日志格式
LOG_FORMAT = "%(asctime)s-%(levelname)s-%(filename)s-%(funcName)s-%(lineno)d: %(message)s"

 

(6)fake-useragent

安装:pip install fake_useragent

使用:

settings.py:

DOWNLOADER_MIDDLEWARES = {
    '项目名称.middlewares.RandomUserAgentMiddleware': 543,
}

middlewares.py:

class RandomUserAgentMiddleware:
    def process_request(self, request, spider):
        ua = UserAgent()
        request.headers['User-Agent'] = ua.random

(7)selenium

 

(8)scrapy+scrapyd+scrapy-redis+Gerapy(spiderkeeper 、scrapydweb、Crawlab)

(9)其他
开源request等测试地址:http://httpbin.org/get

三、VS Code

(1)注释及取消注释:CTRL+/

注释:CTRL+K+C 、取消注释:CTRL+K+U

四、Mysql8

(1)修改密码:

ALTER USER "root"@"localhost" IDENTIFIED BY "你的新密码";

(2)插入数据提示:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

在my.ini的mysqld下增加:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

(3)执行mysql命令提示找不到msvcp140.dll

缺VC++2015,安装即可。微软下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=53840

(4)windows启动服务及net start mysql命令启动服务,提示 “服务没有及时响应启动或控制请求”、“NET HELPMSG 2186”

我的电脑(此电脑)->右键“管理”->“服务”->找到对应的Mysql服务->右键“属性” ->“登录” ->选“此账户”->选用户输入密码

(5)mysql函数

length: 一个汉字是算三个字符,一个数字或字母算一个字符
char_length: 不管汉字还是数字或者是字母都算是一个字符
replace:Update `table_name` SET `field_name` = replace (`field_name`,’from_str’,'to_str’)

五、命令行

(1)tree /f 查看树状目录结构

(2)命令行输出过滤   pip list | find /I "scrapy"

六、GIS

OSM:https://www.openstreetmap.org/

OSM数据下载:http://download.geofabrik.de/asia/

QGIS:https://www.qgis.org/zh-Hans/site/

QGIS插件:https://plugins.qgis.org/

GeoHey Toolbox 插件(坐标转换)、QuickMapServices 插件(底图)、QuickOSM

QGIS DESKTOP设置中文:setting->options->general->override system locale->user interface translation->简体中文

posted on 2021-01-12 17:37  阿彬  阅读(126)  评论(0编辑  收藏  举报