您现在的位置是:娱乐 >>正文
网络爬虫实验报告总结
娱乐6人已围观
简介```html 网络爬虫实验报告总结 body { font-family: 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif; line-h ...
网络爬虫实验报告总结
用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注入。
“爬虫写得好,牢饭吃得饱”——这话夸张了,但踩过边界的人才知道分寸在哪。
实验里我故意试了试高频请求:不加延迟,每秒20次,持续30秒。第8秒开始出现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检查,虽然慢了点,但心里踏实。爬虫的终点不是技术,是分寸。
Tags:
上一篇:免费查行业数据的网站
相关文章
aspx获取url参数
娱乐在ASP.NET Web Forms里取URL参数,最直接的办法就是Request.QueryString["key"]。这行代码几乎每个搞过老ASP.NET的人都写过,但它背后藏着几个坑,新手常踩, ...
【娱乐】
阅读更多诈骗案例分析300字
娱乐2023年秋天,杭州一位做外贸生意的老周,收到一条来自“老客户”的微信语音,声音一模一样,对方说急需一笔周转资金,承诺三天后连本带息归还。老周没多想,转了48万过去。三天后,真客户打来电话问货期,老周 ...
【娱乐】
阅读更多黑客怎么预测彩票
娱乐2018年,美国一名数学系研究生用算法扫描了三年期所有开奖号码,发现某个数字组合出现的频率比随机分布高出0.7%。他押上全部积蓄买了5000注,结果中了两个末等奖,亏了4000美元。这个故事说明一个 ...
【娱乐】
阅读更多