鱼C论坛

 找回密码
 立即注册
查看: 2425|回复: 17

[已解决]爬虫为什么爬一点就中断了呢

[复制链接]
发表于 2020-8-5 15:29:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 L嘉 于 2020-8-5 20:26 编辑

@Twilight6
  1. # -*- coding: utf-8 -*-



  2. from lxml import etree
  3. import requests
  4. import csv
  5. import time

  6. def writecsv(item):
  7.     with open('ershou.csv','a',encoding = 'utf-8') as f:   
  8.         writer = csv.writer(f)
  9.         try:
  10.             writer.writerow(item)           
  11.         except:
  12.             print('write error!')
  13.             

  14. if __name__ == '__main__':
  15.     headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.3'}

  16.     start_url = 'https://cd.ke.com/ershoufang/damian/pg'   
  17.     for x in range(1,76):      
  18.         url = start_url + str(x)
  19.         html = requests.get(url,headers = headers)
  20.         time.sleep(3)         
  21.         selector = etree.HTML(html.text)
  22.         
  23.        #小区列表
  24.         xiaoqulist = selector.xpath('//*[@id="beike"]/div[1]/div[4]/div[1]/div[4]/ul/li')
  25.         for xiaoqu in xiaoqulist:
  26.             
  27.        #楼盘名
  28.             mingcheng = xiaoqu.xpath('div/div[2]/div[1]/div/a/text()')[0]
  29.             
  30.        #楼盘信息
  31.             xinxi = xiaoqu.xpath('div/div[2]/div[2]/text()')[1]
  32.             
  33.        #均价
  34.             junjia = xiaoqu.xpath('div/div[2]/div[5]/div[2]/span/text()')[0]
  35.             
  36.        #总价
  37.             zongjia = xiaoqu.xpath('//div/div[5]/div[@class="totalPrice"]/span/text()')[0]
  38.       
  39.             
  40.             item = [mingcheng, xinxi, junjia, zongjia]
  41.             writecsv(item)
  42.             print('londing:',mingcheng)   
  43.             

复制代码
最佳答案
2020-8-5 22:43:59

试试看?

  1. # -*- coding: utf-8 -*-


  2. from lxml import etree
  3. import requests
  4. import csv
  5. import time


  6. def writecsv(item):
  7.     with open('ershou.csv', 'a', encoding='utf-8') as f:
  8.         writer = csv.writer(f)
  9.         writer.writerow(item)



  10. if __name__ == '__main__':
  11.     headers = {
  12.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.3',
  13.         'referer':'https://cd.ke.com/ershoufang/damian/pg/'}

  14.     start_url = 'https://cd.ke.com/ershoufang/damian/pg'
  15.     for x in range(1, 76):
  16.         url = start_url + str(x)
  17.         html = requests.get(url, headers=headers)
  18.         time.sleep(3)
  19.         selector = etree.HTML(html.text)
  20.         headers['referer'] = f'https://cd.ke.com/ershoufang/damian/pg{x-1}/'

  21.         # 小区列表
  22.         xiaoqulist = selector.xpath('//*[@id="beike"]/div[1]/div[4]/div[1]/div[4]/ul/li')
  23.         for xiaoqu in xiaoqulist:
  24.             # 楼盘名
  25.             mingcheng = xiaoqu.xpath('div/div[2]/div[1]/div/a/text()')[0]

  26.             # 楼盘信息
  27.             xinxi = xiaoqu.xpath('div/div[2]/div[2]/text()')[1]

  28.             # 均价
  29.             junjia = xiaoqu.xpath('div/div[2]/div[5]/div[2]/span/text()')[0]

  30.             # 总价
  31.             zongjia = xiaoqu.xpath('//div/div[5]/div[@class="totalPrice"]/span/text()')[0]

  32.             item = [mingcheng, xinxi, junjia, zongjia]
  33.             writecsv(item)
  34.             print('londing:', mingcheng)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-5 15:30:18 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-8-5 15:35 编辑

可能缩进乱了
  1. from lxml import etree
  2. import requests
  3. import csv
  4. import time

  5. def writecsv(item):
  6.     with open('ershou.csv','a',encoding = 'utf-8') as f:   
  7.         writer = csv.writer(f)
  8.         try:
  9.             writer.writerow(item)           
  10.         except:
  11.             print('write error!')
  12.             

  13. if __name__ == '__main__':
  14.     headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.3'}

  15.     start_url = 'https://cd.ke.com/ershoufang/damian/pg'   
  16.     for x in range(1,76):      
  17.         url = start_url + str(x)
  18.         html = requests.get(url,headers = headers)
  19.         time.sleep(3)         
  20.         selector = etree.HTML(html.text)
  21.         
  22.         #小区列表
  23.         xiaoqulist = selector.xpath('//*[@id="beike"]/div[1]/div[4]/div[1]/div[4]/ul/li')
  24.         for xiaoqu in xiaoqulist:
  25.             
  26.                    #楼盘名
  27.             mingcheng = xiaoqu.xpath('div/div[2]/div[1]/div/a/text()')[0]
  28.             
  29.             #楼盘信息
  30.             xinxi = xiaoqu.xpath('div/div[2]/div[2]/text()')[1]
  31.             
  32.             #均价
  33.             junjia = xiaoqu.xpath('div/div[2]/div[5]/div[2]/span/text()')[0]
  34.             
  35.             #总价
  36.             zongjia = xiaoqu.xpath('//div/div[5]/div[@class="totalPrice"]/span/text()')[0]
  37.       
  38.             
  39.             item = [mingcheng, xinxi, junjia, zongjia]
  40.             writecsv(item)
  41.             print('londing:',mingcheng)   
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 15:31:59 | 显示全部楼层
我这里没有问题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-5 15:35:44 | 显示全部楼层
qiuyouzhi 发表于 2020-8-5 15:31
我这里没有问题?

我要爬取75页一共2000多条数据,结果就出来90多条
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-5 15:37:03 | 显示全部楼层

2000多条信息就爬出来90多条
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 15:38:14 | 显示全部楼层
L嘉 发表于 2020-8-5 15:35
我要爬取75页一共2000多条数据,结果就出来90多条

妈耶,这么多的吗
我建议你每次sleep几秒,不然不被反爬是不可能的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-5 15:39:58 | 显示全部楼层
qiuyouzhi 发表于 2020-8-5 15:38
妈耶,这么多的吗
我建议你每次sleep几秒,不然不被反爬是不可能的

我设置的5秒啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 15:49:36 | 显示全部楼层
L嘉 发表于 2020-8-5 15:39
我设置的5秒啊

噢,抱歉,没看见
那我建议你爬完一页休息个几分钟,几秒钟或许不够?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-5 15:54:03 | 显示全部楼层
qiuyouzhi 发表于 2020-8-5 15:49
噢,抱歉,没看见
那我建议你爬完一页休息个几分钟,几秒钟或许不够?

那不得加班了哦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 16:01:20 From FishC Mobile | 显示全部楼层
L嘉 发表于 2020-8-5 15:54
那不得加班了哦

你要爬取的主要是什么?
是不是每个内容的标题,还是里面的内容也需要?
2002 条不是个小数目,建议每次爬取 100 多条,下一次从上次结束的地方断点续传
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 16:04:11 | 显示全部楼层
L嘉 发表于 2020-8-5 15:54
那不得加班了哦

谁叫那个网站反爬厉害呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 16:04:12 | 显示全部楼层
L嘉 发表于 2020-8-5 15:54
那不得加班了哦

我可以帮你改一下代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-5 16:04:31 | 显示全部楼层
_2_ 发表于 2020-8-5 16:01
你要爬取的主要是什么?
是不是每个内容的标题,还是里面的内容也需要?
2002 条不是个小数目,建议每 ...

就表面的一些内容,子页面的没有爬取
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-5 16:06:26 | 显示全部楼层
1q23w31 发表于 2020-8-5 16:04
我可以帮你改一下代码

你是说加多线程吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 18:01:44 From FishC Mobile | 显示全部楼层
L嘉 发表于 2020-8-5 16:06
你是说加多线程吗?

可以考虑,不过要为每个线程单独设置
(就是第一个线程爬0-99,第二个线程爬100-200,以此类推)
比较麻烦就不搞了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-5 20:18:14 | 显示全部楼层
_2_ 发表于 2020-8-5 18:01
可以考虑,不过要为每个线程单独设置
(就是第一个线程爬0-99,第二个线程爬100-200,以此类推)
比较 ...

好的谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-5 22:43:59 | 显示全部楼层    本楼为最佳答案   

试试看?

  1. # -*- coding: utf-8 -*-


  2. from lxml import etree
  3. import requests
  4. import csv
  5. import time


  6. def writecsv(item):
  7.     with open('ershou.csv', 'a', encoding='utf-8') as f:
  8.         writer = csv.writer(f)
  9.         writer.writerow(item)



  10. if __name__ == '__main__':
  11.     headers = {
  12.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.3',
  13.         'referer':'https://cd.ke.com/ershoufang/damian/pg/'}

  14.     start_url = 'https://cd.ke.com/ershoufang/damian/pg'
  15.     for x in range(1, 76):
  16.         url = start_url + str(x)
  17.         html = requests.get(url, headers=headers)
  18.         time.sleep(3)
  19.         selector = etree.HTML(html.text)
  20.         headers['referer'] = f'https://cd.ke.com/ershoufang/damian/pg{x-1}/'

  21.         # 小区列表
  22.         xiaoqulist = selector.xpath('//*[@id="beike"]/div[1]/div[4]/div[1]/div[4]/ul/li')
  23.         for xiaoqu in xiaoqulist:
  24.             # 楼盘名
  25.             mingcheng = xiaoqu.xpath('div/div[2]/div[1]/div/a/text()')[0]

  26.             # 楼盘信息
  27.             xinxi = xiaoqu.xpath('div/div[2]/div[2]/text()')[1]

  28.             # 均价
  29.             junjia = xiaoqu.xpath('div/div[2]/div[5]/div[2]/span/text()')[0]

  30.             # 总价
  31.             zongjia = xiaoqu.xpath('//div/div[5]/div[@class="totalPrice"]/span/text()')[0]

  32.             item = [mingcheng, xinxi, junjia, zongjia]
  33.             writecsv(item)
  34.             print('londing:', mingcheng)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-7 14:09:21 | 显示全部楼层
试试用多进程
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-25 05:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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