L嘉 发表于 2020-8-5 15:29:22

爬虫为什么爬一点就中断了呢

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

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



from lxml import etree
import requests
import csv
import time

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

if __name__ == '__main__':
    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'}

    start_url = 'https://cd.ke.com/ershoufang/damian/pg'   
    for x in range(1,76):      
      url = start_url + str(x)
      html = requests.get(url,headers = headers)
      time.sleep(3)         
      selector = etree.HTML(html.text)
      
       #小区列表
      xiaoqulist = selector.xpath('//*[@id="beike"]/div/div/div/div/ul/li')
      for xiaoqu in xiaoqulist:
            
       #楼盘名
            mingcheng = xiaoqu.xpath('div/div/div/div/a/text()')
            
       #楼盘信息
            xinxi = xiaoqu.xpath('div/div/div/text()')
            
       #均价
            junjia = xiaoqu.xpath('div/div/div/div/span/text()')
            
       #总价
            zongjia = xiaoqu.xpath('//div/div/div[@class="totalPrice"]/span/text()')
      
            
            item =
            writecsv(item)
            print('londing:',mingcheng)   
            

xiaosi4081 发表于 2020-8-5 15:30:18

本帖最后由 xiaosi4081 于 2020-8-5 15:35 编辑

可能缩进乱了
from lxml import etree
import requests
import csv
import time

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

if __name__ == '__main__':
    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'}

    start_url = 'https://cd.ke.com/ershoufang/damian/pg'   
    for x in range(1,76):      
      url = start_url + str(x)
      html = requests.get(url,headers = headers)
      time.sleep(3)         
      selector = etree.HTML(html.text)
      
      #小区列表
      xiaoqulist = selector.xpath('//*[@id="beike"]/div/div/div/div/ul/li')
      for xiaoqu in xiaoqulist:
            
                 #楼盘名
            mingcheng = xiaoqu.xpath('div/div/div/div/a/text()')
            
            #楼盘信息
            xinxi = xiaoqu.xpath('div/div/div/text()')
            
            #均价
            junjia = xiaoqu.xpath('div/div/div/div/span/text()')
            
            #总价
            zongjia = xiaoqu.xpath('//div/div/div[@class="totalPrice"]/span/text()')
      
            
            item =
            writecsv(item)
            print('londing:',mingcheng)   

qiuyouzhi 发表于 2020-8-5 15:31:59

我这里没有问题?

L嘉 发表于 2020-8-5 15:35:44

qiuyouzhi 发表于 2020-8-5 15:31
我这里没有问题?

我要爬取75页一共2000多条数据,结果就出来90多条

L嘉 发表于 2020-8-5 15:37:03

xiaosi4081 发表于 2020-8-5 15:30
可能缩进乱了

2000多条信息就爬出来90多条

qiuyouzhi 发表于 2020-8-5 15:38:14

L嘉 发表于 2020-8-5 15:35
我要爬取75页一共2000多条数据,结果就出来90多条

妈耶,这么多的吗
我建议你每次sleep几秒,不然不被反爬是不可能的

L嘉 发表于 2020-8-5 15:39:58

qiuyouzhi 发表于 2020-8-5 15:38
妈耶,这么多的吗
我建议你每次sleep几秒,不然不被反爬是不可能的

我设置的5秒啊

qiuyouzhi 发表于 2020-8-5 15:49:36

L嘉 发表于 2020-8-5 15:39
我设置的5秒啊

噢,抱歉,没看见
那我建议你爬完一页休息个几分钟,几秒钟或许不够?

L嘉 发表于 2020-8-5 15:54:03

qiuyouzhi 发表于 2020-8-5 15:49
噢,抱歉,没看见
那我建议你爬完一页休息个几分钟,几秒钟或许不够?

{:10_277:}那不得加班了哦

_2_ 发表于 2020-8-5 16:01:20

L嘉 发表于 2020-8-5 15:54
那不得加班了哦

你要爬取的主要是什么?
是不是每个内容的标题,还是里面的内容也需要?
2002 条不是个小数目,建议每次爬取 100 多条,下一次从上次结束的地方断点续传

qiuyouzhi 发表于 2020-8-5 16:04:11

L嘉 发表于 2020-8-5 15:54
那不得加班了哦

{:10_250:}谁叫那个网站反爬厉害呢

1q23w31 发表于 2020-8-5 16:04:12

L嘉 发表于 2020-8-5 15:54
那不得加班了哦

我可以帮你改一下代码{:9_219:}

L嘉 发表于 2020-8-5 16:04:31

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

就表面的一些内容,子页面的没有爬取

L嘉 发表于 2020-8-5 16:06:26

1q23w31 发表于 2020-8-5 16:04
我可以帮你改一下代码

你是说加多线程吗?

_2_ 发表于 2020-8-5 18:01:44

L嘉 发表于 2020-8-5 16:06
你是说加多线程吗?

可以考虑,不过要为每个线程单独设置
(就是第一个线程爬0-99,第二个线程爬100-200,以此类推)
比较麻烦就不搞了

L嘉 发表于 2020-8-5 20:18:14

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

好的谢谢

Twilight6 发表于 2020-8-5 22:43:59


试试看?

# -*- coding: utf-8 -*-


from lxml import etree
import requests
import csv
import time


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



if __name__ == '__main__':
    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',
      'referer':'https://cd.ke.com/ershoufang/damian/pg/'}

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

      # 小区列表
      xiaoqulist = selector.xpath('//*[@id="beike"]/div/div/div/div/ul/li')
      for xiaoqu in xiaoqulist:
            # 楼盘名
            mingcheng = xiaoqu.xpath('div/div/div/div/a/text()')

            # 楼盘信息
            xinxi = xiaoqu.xpath('div/div/div/text()')

            # 均价
            junjia = xiaoqu.xpath('div/div/div/div/span/text()')

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

            item =
            writecsv(item)
            print('londing:', mingcheng)

陈尚涵 发表于 2020-8-7 14:09:21

试试用多进程{:10_312:}
页: [1]
查看完整版本: 爬虫为什么爬一点就中断了呢