鱼C论坛

 找回密码
 立即注册
查看: 2797|回复: 5

scrapy 爬取的数据和网上不太一样

[复制链接]
发表于 2017-6-27 16:11:18 | 显示全部楼层 |阅读模式

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

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

x
最近在研究爬虫的东西,现在想爬取网页http://www.23us.com/class/1_1.html里面的小说的标题,这个是第一页网址,第页的是http://www.23us.com/class/1_2.html,以此类推

  1. C:\Users\Administrator>cd Desktop
  2. C:\Users\Administrator\Desktop>cd dingdian
  3. C:\Users\Administrator\Desktop\dingdian>scrapy shell "http://www.23us.com/class/
  4. 1_1.html"
复制代码

我是在cmd那个里面调试的,根据小甲鱼老师视屏里面教的


  1. tds = response.xpath('//tr[@bgcolor="#FFFFFF"]')
  2.     for td in tds:
  3.         novelname = td.xpath('td[1]/a[2]/text()').extract()[0]
  4.         print(novelname)
复制代码


打印出来的也是小说名字,但是和网页上的对不上号,只有某几个是一样的,然后我长时间调试后发现这个网页http://www.23us.com/class/1_1.html也就是第一页,它显示的书目每隔一小会就会变化,但是从第二页开始至后面都是固定的,然后我又重复上述的操作,调试了一下http://www.23us.com/class/1_2.html    http://www.23us.com/class/1_3.html还有后面几页,发现都是正常的,但是关于第一页却怎么也想不通,为什么爬取到的数据会和网上显示的不一样?

有没有大神可以帮我解答一下~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-27 21:50:35 | 显示全部楼层
明天白天给你看下情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-29 18:35:19 | 显示全部楼层
它是一直每隔几分钟就有更新,更新了,不一样也是正常吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-30 10:42:39 | 显示全部楼层
32269100 发表于 2017-6-29 18:35
它是一直每隔几分钟就有更新,更新了,不一样也是正常吧

但是我用爬虫爬的数据确是固定的,重复了几次爬取的都是一样的数据,和网上更新的对不上,只有一小部分是一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-6 12:41:08 | 显示全部楼层
本帖最后由 早起的达仙僧 于 2017-7-6 14:05 编辑
32269100 发表于 2017-6-30 13:50
那你把你的爬虫文件上传上来,我下载看看吧


不好意思,出去出差了一周,我今天回来调试了下发现爬取又正常了,但是第一页没法爬取,只能爬取后面的页数,我在爬虫的程序中做了标注。

  1.     def parse(self, response):
  2.         #max_num = response.xpath('//div[@class="pagelink"]/a[@class="last"]/text()').extract()[0]
  3.         max_num=1#第一页没法爬取,不知道为什么,第二页是可以的
  4.         url_1 = str(response.url)[:-7]
  5.         for num in range(1,int(max_num)+1):
  6.             url = url_1 + '_' + str(num) + self.bashurl
  7.             yield Request(url,callback=self.get_name)
复制代码


在这段代码中,如果我的max_num=1,则什么都爬取不到,但是如果我改成2,3,4。。。后面的几页内容就能爬取到了,感觉和上周遇到的问题又不太一样了,麻烦亲帮我看看是不是我程序哪里写得不合理




补充一下,我中午又测试了一下代码,我将爬虫的py文件进行了简化
  1. import re
  2. import scrapy #导入scrapy包
  3. from bs4 import BeautifulSoup
  4. from scrapy.http import Request ##一个单独的request的模块,需要跟进URL的时候,需要用它
  5. from dingdian.items import DingdianItem ##这是我定义的需要保存的字段,(导入dingdian项目中,items文件中的DingdianItem类)

  6. class Myspider(scrapy.Spider):

  7.     name = 'dingdian'
  8.     allowed_domains = ['23us.com']
  9.     start_urls = ['http://www.x23us.com/class/1_4.html']

  10.     def parse(self, response):
  11.         tds = response.xpath('//tr[@bgcolor="#FFFFFF"]')
  12.         for td in tds:
  13.             novelname = td.xpath('td[1]/a[2]/text()').extract()[0]
  14.             novelurl = td.xpath('td[1]/a[1]/@href').extract()[0]
  15.             print(novelname+':'+novelurl)
复制代码

我单单就想爬取这个网页中的列表中的书名以及简介的地址,但是发现遇到了第一次的问题,就是爬取的数据和网上显示的不对,而且这个问题有点奇怪,我上午爬取的时候还是对的,中午爬取的数据就有差异了。现在是每个板块的第一页可以爬取正确,后面几页爬取到的数据和页面显示的不同

dingdian.zip

492.23 KB, 下载次数: 0

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

使用道具 举报

 楼主| 发表于 2017-7-6 14:27:04 | 显示全部楼层
32269100 发表于 2017-6-30 13:50
那你把你的爬虫文件上传上来,我下载看看吧

调试了一下午终于知道问题了,因为我根据网上的教程改动了SETING文件里的参数,本来这部分是注释的,我把它取消了,”这几行注释的作用是,Scrapy会缓存你有的Requests!当你再次请求时,如果存在缓存文档则返回缓存文档,而不是去网站请求,这样既加快了本地调试速度,也减轻了 网站的压力。”教程里是这么写的,可能是我第一次运行后有缓存了,导致网页更新后,请求返回的response是缓存里的response而不是网页更新后返回的response.

教程参考:http://cuiqingcai.com/3472.html
爬取网页素材参考:http://www.x23us.com/
设置setting01.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 23:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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