1首先这两天遇到线程锁的问题不涉及锁机制,只改代码
线程锁的时候一定要锁上全局变量,局部变量或没锁的情况都会造成程序重复

同时lock.acquire(),lock.release()可以使用with lock,前提是实例化threading,还有就是锁得代码越关键越好而不是越多越好

mutex=threading.Lock()

改写后方案:

with mutex:for i in range(1000000): #锁定期间,其他线程不可以干活num+=1

原方案:当然锁住的变量一定是全局变量,局部变量的话就会使线程读的时候该参数会出现多次读取同一个值

if mutex.acquire(1):#锁住成功继续干活,没有锁住成功就一直等待,1代表独占for i in range(1000000): #锁定期间,其他线程不可以干活num+=1mutex.release() #释放锁

2列表推导式的问题:两种方式含义不同具体请百度,但都涉及一个问题,由于循环是无止境的(某种意义上将),那么这个时候要想从循环中去查一个条件是没有意义的,类似与下面,必须在给定if条件下方break,否则就是不断被循环中下一个值覆盖的不到你想要的值,当然列表推导式不支持break。
另外continue是跳过一次循环,也就是你可以剔除循环中你不要的值,方法很多具体实现看个人。

第一种方式:

[m for m in image_list if (str(id) + "_0") in m]

第二种方式

[m if (str(id) + "_0") in m  else image_list[0] for m in image_list]

3文件操作:一个简单的转移文件希望能帮到你

    name = os.path.basename(paths)  # 获取文件名dirname = os.path.dirname(paths)  # 获取文件目录full_path = os.path.join(dirname, name)合并路径shutil.move(full_path,path)##转移文件到目标文件夹,shutil要导包

4代理简单实现:其实诸如代理池也是可以的但是免费的代理不论你怎么去分级别处理基本不太好使。此处推荐阿布云代理实测稳定,每次请求一个代理,不过会有重复的,我此处并未去重。

# proxyHost = "*****"proxyPort = "*****"# 代理隧道验证信息注册就会有的proxyUser = "*******"proxyPass = "*******"proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {"host" : proxyHost,"port" : proxyPort,"user" : proxyUser,"pass" : proxyPass,}proxy={"http"  : proxyMeta,"https" : proxyMeta,}##这些是手机的uauseragent=["Mozilla/5.0 (iPhone 84; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.0 MQQBrowser/7.8.0 Mobile/14G60 Safari/8536.25 MttCustomUA/2 QBWebViewType/1 WKType/1","Mozilla/5.0 (Linux; Android 7.0; STF-AL10 Build/HUAWEISTF-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 V1_AND_SQ_7.2.0_730_YYB_D QQ/7.2.0.3270 NetType/4G WebP/0.3.0 Pixel/1080","Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Mobile/14G60 MicroMessenger/6.5.18 NetType/WIFI Language/en","Mozilla/5.0 (Linux; Android 5.1.1; vivo Xplay5A Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 T7/9.3 baiduboxapp/9.3.0.10 (Baidu; P1 5.1.1)","Mozilla/5.0 (Linux; U; Android 7.0; zh-cn; STF-AL00 Build/HUAWEISTF-AL00) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.9 Mobile Safari/537.36","Mozilla/5.0 (Linux; Android 6.0; LEX626 Build/HEXCNFN5902606111S) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/35.0.1916.138 Mobile Safari/537.36 T7/7.4 baiduboxapp/8.3.1 (Baidu; P1 6.0)","Mozilla/5.0 (iPhone 92; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.0 MQQBrowser/7.7.2 Mobile/14F89 Safari/8536.25 MttCustomUA/2 QBWebViewType/1 WKType/1","Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; ZUK Z2121 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.6.8.952 Mobile Safari/537.36","Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Mobile/15A372 MicroMessenger/6.5.17 NetType/WIFI Language/zh_HK","Mozilla/5.0 (Linux; U; Android 6.0.1; zh-CN; SM-C7000 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.6.2.948 Mobile Safari/537.36","MQQBrowser/5.3/Mozilla/5.0 (Linux; Android 6.0; TCL 580 Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Mobile Safari/537.36","Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C92 MicroMessenger/6.5.16 NetType/WIFI Language/zh_CN","Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; MI 4S Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/9.1.3","Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; SM-G9550 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.7.0.953 Mobile Safari/537.36","Mozilla/5.0 (Linux; Android 5.1; m3 note Build/LMY47I; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 T7/9.3 baiduboxapp/9.3.0.10 (Baidu; P1 5.1)",]headers = {"User-Agent": random.choice(useragent),'Connection': 'close'#####使用代理的时候可能会报错所以这里需要设置为什么百度}res=requests.get("https://www.百度.com/?",headers=headers,proxies=proxy)

还有就是之前有个面试官惊讶的问我代理不好用被绊了怎么能重连,我只想说你去惊讶吧。
*说个最简单的吧,在请求的地方加一个while true: 循环中加一个try except。请求之后判断返回状态码if
status_code == 200 ,来截取不成功的,成功就break,在200开外的continue(要处理的话自己动脑子,不过不建议,毕竟你使用了代理在重新跑一边未成功的URL就好了),报错了直接continue(相当于换了一个ip,当然如果IP太差就不要这么做了)*

5计算地图上两地之间距离,不是直线距离,是经纬度差异,比较小众有需求就用吧

    def calcu_location(self, location_x, location_y, r=0.1):lat_range = 180 / math.pi * r / 6372.797  # 里面的 1 就代表搜索 1km 之内,单位kmlong_r = lat_range / math.cos(location_x * math.pi / 180)max_lat = location_x + lat_range  # 最大纬度min_lat = location_x - lat_range  # 最小纬度max_long = location_y + long_r  # 最大经度min_long = location_y - long_r  # 最小经度range_xy = {}range_xy['location_x'] = {'min': min_lat, 'max': max_lat}range_xy['location_y'] = {'min': min_long, 'max': max_long}return range_xyl = calcu_location(float(x), float(y))###传入的经纬度# 下面了是对经纬度进行取小数点位数,转类型最后方便比较,当然写法啰嗦了点x_max=float(str(l['location_x']['max'])[0:7])x_min =float(str(l['location_x']['min'])[0:7])y_max = float(str(l['location_y']['max'])[0:8])y_min =float(str(l['location_y']['min'])[0:8])

6分词对比,此处我用的是最懒最简单的包difflib,当然python还有jieba这个听说不错,此处仅为偷懒
difflib.SequenceMatcher(None,x,y).ratio()返回0到一之间的两个词相似度的数字

好了东西有点少但是真的是因为懒

python3爬虫踩坑记纪录篇(二)相关推荐

  1. 环信SDK 踩坑记webIM篇(二)

    发送消息时报错Converting circular structure to JSON 这句话我也在网上查了一下,导致的原因可能是里面存在多级递归,导致JSON很大,不能使用.这是为什么呢,请看代码 ...

  2. 环信SDK 踩坑记webIM篇(三)

    问题:接收消息时报错 TypeError: Cannot read property 'isemoji' of undefined at connection.handleMessage 自己打开了w ...

  3. 环信SDK 踩坑记webIM篇(一)

    (一)处理添加好友 问题:添加好友时,一直返回none,就是对方拒绝添加的意思,可是在代码里明明就是有同意添加 的代码: onPresence: function (message) {switch ...

  4. 口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现

    本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录.如哪里有侵权请联系笔者进行删除.另外在这里对比赛举办方表示感谢 ~ ~ 其中开源代码会在整理后放在github ...

  5. Typora+PicGo-core+SMMS图床踩坑记

    Typora+PicGo-core+SMMS图床踩坑记 一.安装PicGo-Core 二.安装smms v2 API插件 三.配置PicGo-Core 四.最终效果 五.总结 最近把Typora更新后 ...

  6. 在百度地图中叠加CAD图及GIS数据展示踩坑记

    前言 在之前的几篇博客中分别介绍了 在Cesium中实现与CAD的DWG图叠加显示分析 https://www.cnblogs.com/vjmap/p/16541751.html . 高德地图与CAD ...

  7. 7代cpu能装虚拟xp系统吗_Intel 10代PC/笔记本安装Win7踩坑记 amp; 驱动分享

    免责声明:本文只是从技术角度进行讨论,主要因我自己的兴趣而引发测试.只代表个人观点,与任何组织机构无关. 目录 -  从赛扬G5900"亮机"CPU说起 -  10代Core Wi ...

  8. Lasso回归系列一:用LASSO回归做特征筛选踩坑记

    用LASSO回归做特征筛选使用踩坑记 什么时候应该用LASSO回归进行特征筛选?使用时容易踩的坑你都避开了吗?Lasso回归的原理(请看我的另一篇博客: Lasso回归系列二:Lasso回归/岭回归的 ...

  9. android小程序_小程序踩坑记

    小程序踩坑记 希望这个文章能尽量记录下小程序的那些坑,避免开发者们浪费自己的生命来定位到底是自己代码导致的还是啥神秘的字节跳变原因. 前记 小程序大多数坑是同一套代码在不同平台上表现不一致导致的,微信 ...

最新文章

  1. linux下使用sort命令升序、降序、随机及组合方式排序方法
  2. python打开中文文件名_[请教]python的中文文件名处理
  3. 全球与中国固态电池市场深度研究及投资可行性评估报告2022-2028年
  4. [IoC容器Unity]第三回:依赖注入
  5. LeetCode 1379. 找出克隆二叉树中的相同节点(二叉树遍历)
  6. 从FLC中学习的设计模式系列-创建型模式(3)-工厂方法
  7. qunee for html5,Qunee for HTML5(二)
  8. Linux下fat32文件系统变为只读
  9. 自反ACL实验(GNS3)
  10. android 自动跳转市场,js判断设备,跳转app应用、android市场或者AppStore
  11. Fab-PIE(制程整合工程师)详细介绍
  12. 如何生成smali文件
  13. pandas将df赋值到另一个df_Python/Pandas:如果匹配的話,將一個df的值添加到另一個df的行的末尾...
  14. 你对区块链的理解还停留在炒币上吗
  15. Python中的self用法
  16. brew安装报错:fatal: not in a git directory Error: Command failed with exit 128: git
  17. java applet配置_最简单的Java Applet程序
  18. [Rust实战]初探 actix_web
  19. 短网址缩短网址源码Shortny v2.0.1
  20. Web3.0介绍与产业赛道(去中心化,金融与数字资产,应用与存储,区块链技术)

热门文章

  1. 飞秋下载2010正式版 飞秋下载
  2. ubuntu 移除PPA
  3. Web前端:简易灯箱画廊案例设计
  4. 浅谈tcp协议与tcp_tw
  5. c语言表示三个数除却最大最小,湖南师范大l历年年语言学及应用语言学现代汉语考研试题.doc...
  6. 计算机课题研究会议记录,(课题研究工作会议记录.doc
  7. 第一次单元测验参考答案详解 mooc程序设计入门——翁凯
  8. 关于网络架构的额外知识
  9. 用python写pdf_用 Python 写了一个 PDF 转换器,以后再也不用花钱转了
  10. 来兄弟连的点滴—兄弟连IT教育