鱼C论坛

 找回密码
 立即注册
查看: 671|回复: 15

[已解决]关于爬虫线程问题,有会爬虫方面的渔友吗

[复制链接]
发表于 2019-1-25 22:51:21 | 显示全部楼层 |阅读模式
50鱼币
本帖最后由 Stubborn 于 2019-1-27 04:51 编辑

秉承着学习的态度看了下多线程。加上之前刚刚好找一个网站练手,于是继续拿那个网站练手,遇到一些问题,有指教的不甚感激。主要是下载不到数据。提取什么的都正常。
为什么下载不了下载不了,解析都OK的
剔除保存图片的代码,可以正常循环,不剔除代码块只循环一次,就过了


思路很简单,代码如下:

  1.     def save_img(self,img_number,img_url,title):
  2.         "图集下载"
  3.         headers = {
  4.             'User-Agent': ua.random,
  5.             'Referer': 'http://i.meizitu.net'
  6.         }
  7.         for i in range(1,int(img_number)+1):
  8.             # print("当前正在工作的线程是:{},正在解析{}图集,地址是{}".format(self.thread_id, title,img_url))
  9.             img_subset_url = img_url + "/%s" % i
  10.             print("当前正在工作的线程是:{},正在解析{}图集,地址是{}".format(self.thread_id, title, img_subset_url))
  11.             img_url = etree.HTML(requests.get(img_subset_url,headers=headers).text)
  12.             img_save_url = img_url.xpath('//div[@class="main-image"]/p/a/img/@src')[0]  #图片下载地址
  13.             img_name = '%s\\' % title + img_url.split('/')[-1]
  14.             #开始下载图片
  15.             response = requests.get(img_save_url, headers=headers)
  16.             with open(img_name,"wb") as f:
  17.                 f.write(response.content)
复制代码




最佳答案
1970-1-1 08:00:00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-25 23:00:17 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-25 23:47:34 | 显示全部楼层
本帖最后由 Stubborn 于 2019-1-25 23:54 编辑
iwanna 发表于 2019-1-25 23:34
大晚上的头晕,线程报错的话会麻烦,其他线程可能还不会停下来,traceback很难看
何况你还try except pass了 ...


def save_img(self,img_number,img_url,title): 测试过,参数都传到位了,
第88行这个参数进行下载的,数据测试过,都采集到了,但是到了
94行代码那个for循环,只会循环一次,然后所有的线程都退出了
然后后for循环下面的代码感觉没有执行
你的意思是可能哪里线程错了吗?

测试78到82行里面有错误,数据出一点,不出一点,会影响到下载吗?我再分析下
当前正在工作的线程是:parser_2,正在解析知性丽图集,图集张数位:41地址是https://www.mzitu.com/169451
当前正在工作的线程是:parser_1,正在解析可爱眼图集,图集张数位:74地址是https://www.mzitu.com/164996
当前正在工作的线程是:parser_3,正在解析各图集,图集张数位:45地址是https://www.mzitu.com/167343
线程分析错误
线程分析错误
当前正在工作的线程是:parser_1,正在解析只图集,图集张数位:51地址是https://www.mzitu.com/164314
当前正在工作的线程是:parser_2,正在解析御姐图集,图集张数位:52地址是https://www.mzitu.com/165703
线程分析错误
线程分析错误
当前正在工作的线程是:parser_3,正在解析图集,图集张数位:47地址是https://www.mzitu.com/166082
线程分析错误
当前正在工作的线程是:parser_1,正在解析优美图集,图集张数位:54地址是https://www.mzitu.com/164018
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-26 00:05:51 | 显示全部楼层
本帖最后由 Stubborn 于 2019-1-26 00:13 编辑
iwanna 发表于 2019-1-25 23:57
好吧,是我蠢了,没发现我可以复制代码自己试试
我是真头晕了,没看到你的情况说明
还 ...



我测试中止爬取了三页。总共是72个图集
图集个数:72
图集数量个数:72
图集个数:72
测试全部传到了
这个代码只能用来生成请求头的,不用这个模块找个'User-Agent',替换掉ua就可以,测试过,for只循环一次,比如我在for下面打印i,全部是1,不是1到图集张数的循环。参数传到下载函数,都正常的

@wongyusing 大神来了  帮忙看看~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-26 00:49:23 | 显示全部楼层
iwanna 发表于 2019-1-26 00:45
你的img_url那里出错了,没有得到里面的文本,而是把_Element对象和str进行了拼接
至于错了哪些地方你再看看 ...

我在看看,非常感谢~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-26 05:21:28 | 显示全部楼层
iwanna 发表于 2019-1-26 00:45
你的img_url那里出错了,没有得到里面的文本,而是把_Element对象和str进行了拼接
至于错了哪些地方你再看看 ...

在了解下,感觉可能是没有设置程序锁,导致线程操作乱序了,我再看看相关视频资料,再修改下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-26 10:39:18 | 显示全部楼层
我能说我看不懂你的代码吗??
或者说我没用过多线程吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-26 12:36:39 | 显示全部楼层
我没学过多线程啊,这几天一直没学习。郁闷了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-26 22:24:18 | 显示全部楼层
本帖最后由 Stubborn 于 2019-1-27 01:02 编辑
iwanna 发表于 2019-1-26 12:40
跟程序锁没关系,你这里是lxml除了问题.你线程之间又没有共享变量,哪有锁的问题





最后测试,加上文件读写的时候,for就不进行循环,打印一次就退出了,不加可以正常循环
  1. 当前parser_1线程正在打印循环变量i的值:1
  2. 当前parser_2线程正在打印循环变量i的值:1
  3. 当前parser_3线程正在打印循环变量i的值:1
  4. 当前parser_2线程正在打印循环变量i的值:1
  5. 当前parser_1线程正在打印循环变量i的值:1
  6. 当前parser_3线程正在打印循环变量i的值:1
  7. 当前parser_2线程正在打印循环变量i的值:1
  8. 当前parser_1线程正在打印循环变量i的值:1
  9. 当前parser_3线程正在打印循环变量i的值:1
复制代码


我换了一种请求方式,可以进行读写,循环正常,不过很尴尬,问题又来了。运行了几秒钟,刷耍走了好多,但是实际下载到的图片只有3张,其他全部丢了 我测试下第二次循环的图片地址看看,是不是没有获取到
  1. parser_3线程正在下载可清纯可性感,尤果模特欣怡制服诱惑堪称仙女本人图集,第1张下载完毕
  2. parser_2线程正在下载 轻轻一撩惊艳万分图集,第1张下载完毕
  3. parser_1线程正在下载臀控福利图片图集,第1张下载完毕
  4. parser_1线程正在下载臀控福利图片图集,第2张下载完毕
  5. parser_2线程正在下载知性丽人miya图集,第2张下载完毕
  6. parser_3线程正在下载可清纯可性感图集,第2张下载完毕
  7. parser_1线程正在下载臀控福利图片图集,第3张下载完毕
  8. parser_3线程正在下载可清纯可性感图集,第3张下载完毕
  9. parser_1线程正在下载臀控福利图片图集,第4张下载完毕
  10. parser_2线程正在下载知性丽人miya图集,第3张下载完毕
  11. parser_3线程正在下载可清纯可性感第4张下载完毕
  12. parser_2线程正在下载知性丽人miya第4张下载完毕
  13. parser_1线程正在下载臀控福利图片第5张下载完毕
  14. 退出了crawl_1线程
  15. parser_3线程正在下载可清纯可性感,第5张下载完毕
  16. parser_2线程正在下载知性丽人miya第5张下载完毕
  17. parser_1线程正在下载臀控福利图片第6张下载完毕
  18. parser_3线程正在下载可清纯可性感第6张下载完毕
  19. parser_2线程正在下载知性丽人miya第6张下载完毕
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-26 22:25:07 | 显示全部楼层
本帖最后由 Stubborn 于 2019-1-27 00:59 编辑
wongyusing 发表于 2019-1-26 10:39
我能说我看不懂你的代码吗??
或者说我没用过多线程吗??


我可以说不能吗,老大
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-1-27 04:47:27 | 显示全部楼层
Stubborn 发表于 2019-1-26 22:24
最后测试,加上文件读写的时候,for就不进行循环,打印一次就退出了,不加可以正常循环

解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 05:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表