网络爬虫实验报告总结
```html 用 这次实验目标很明确:抓取某电商平台手机品类的报告价格和评论数。我选了 补上之后,价格回来了。但评论数又出问题——部分商品显示“暂无评价”,点进详情页明明有几百条。抓包对比发现,列表页的评论数是异步加载的,藏在 实验里我故意试了试高频请求:不加延迟,每秒20次,持续30秒。第8秒开始出现 关于数据清洗,我原本以为 最后聊聊存储。 整个实验做完,最大的收获不是代码本身。是理解了网络爬虫实验报告总结
requests抓某图书网站TOP250时,第37页开始返回空列表。爬虫换了User-Agent、实验加了time.sleep(2),报告依然被识别。总结最后发现是网络Cookie里缺少一个动态令牌——这个细节在课堂演示里从没提过。爬虫不是爬虫“写个循环拿数据”那么简单,它更像一场和服务器之间的实验心理博弈。requests + BeautifulSoup组合,总结没上Scrapy,网络因为页面结构简单,爬虫没必要杀鸡用牛刀。实验第一版代码跑得挺顺,报告前5页数据干净利落。总结第6页开始,返回的HTML里商品价格全变成“登录后可见”。有意思的是,用浏览器无痕模式打开同样URL,价格正常显示。问题不在IP,在请求头里少了一个Referer字段——服务器会检查你从哪个页面跳转过来。
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...',
'Referer': 'https://www.example.com/search?q=phone',
'Accept-Language': 'zh-CN,zh;q=0.9'
} window.__INITIAL_STATE__这个全局变量里,而不是DOM节点。用BeautifulSoup只能拿到静态HTML,得从<script>标签里用正则抠JSON。这种“半动态”页面最烦人,说它是SPA吧,主体内容又是服务端渲染;说它静态吧,关键数据偏要JS注入。“爬虫写得好,牢饭吃得饱”——这话夸张了,但踩过边界的人才知道分寸在哪。
403,第15秒IP被临时封禁。等了两分钟才恢复。后来改成随机延迟1.5~3.5秒,加上Retry策略,连续抓了200页没再触发风控。这里有个反直觉的点:固定延迟比随机延迟更容易被识别,因为机器人的请求间隔太“完美”了。人类点击不会精确到毫秒。pandas的str.extract能搞定一切。结果评论数里混着“1.2万”、“500+”、“暂无”三种格式。写正则时用了(\d+\.?\d*)(万?),但“500+”的加号忘了处理,导致后面排序全乱。更坑的是价格字段,有的带“¥”,有的带“¥”,还有的写“到手价”。统一替换成空字符串再转float,才跑通。这些琐碎的坑,实验指导书上一个字都没写。
csv存了第一版,打开发现中文乱码——to_csv默认utf-8没加encoding='utf-8-sig',Excel不认。换成json又遇到datetime不能序列化,得手动写default=str。折腾一圈回到sqlite,反而最省心。个人判断:小规模实验别碰数据库,文件足够;上了十万条再考虑MySQL或MongoDB。这次抓了不到两万条,sqlite单文件带着走,比啥都方便。robots.txt里那些Disallow路径背后的逻辑——网站不是不让你抓,是不让你无节制地抓。我后来在代码里加了robotparser检查,虽然慢了点,但心里踏实。爬虫的终点不是技术,是分寸。
- 随机阅读
- 搜索
-
- 友情链接
-