D 2. 实战 - scrapy爬虫抓取当当图书评论_8.13

一、确定需求

  1. 抓取当当详情页上的图书(打开搜索页面,输入出版社,点击按销量排、只看有货)
  2. 确定抓取元素:(共12个)
    ID / 书名 / 原价 / 折扣价 / 作者 / 出版日期 / 出版社 / 总评分 / 总评论数 / 书店名 / ISBN /类型
  3. 确定url
    http://search.dangdang.com/?key=+ 出版社名 +
    &act=input&sort_type=sort_sale_amt_desc&filter=0%7C0%7C1%7C0%7C0%7C0%7C0%7C0%7C0%7C0%7C0%7C0%7C0%7C0%7C&
  4. 翻页
    <li class="next"><a href="/?key=%E6%B9%96%E5%8D%97%E6%96%87%E8%89%BA%E5%87%BA%E7%89%88%E7%A4%BE&amp;act=input&amp;sort_type=sort_sale_amt_desc&amp;filter=0%7C0%7C1%7C0%7C0%7C0%7C0%7C0%7C0%7C0%7C0%7C0%7C0%7C0%7C&amp;page_index=2" title="下一页">下一页</a></li>

二、流程

(一) 创建项目、爬虫

  • scrapy startproject name
  • scrapy genspider name example.com

(二) 修改 Items

  • 建字典,包含12个键

(三) 修改 spider

  • 访问url,解析页面,返回数据

注意事项:

  1. 注意导入Items模块
  2. 判断是否需要用上Splash
    使用Splash方法:
    a. 终端输入sudo docker run -p 8050:8050 scrapinghub/splash
    b. 用SplashRequest 代替ScrapyRequest

(四) 修改 pipelines

  • 存入数据库

(五) 修改 setting

  • 修改user-agent
  • 开启splash端口
  • 连接数据库
  • 开启代理

三、问题

(1) 运行爬虫后,数据库出现错误

  1. 报错_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")
  2. 原因:mysql.sock默认路径和实际路径不符
  3. 解决办法:为文件建立连接
    ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

  4. 继续报错:无法创建符号链接"mysql.sock": 文件已存在

  5. 原因:需要强制创建连接符号
  6. 解决办法:
    ln -sf /var/lib/mysql/mysql.sock /tmp/mysql.sock

参考:
python MySQLdb连接mysql失败
报错解决办法
简明Linux命令行笔记:ln

(2)数据库密码错误

  1. 报错_mysql_exceptions.OperationalError: (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded
  2. 原因:密码机制变化
  3. 解决办法:修改密码机制
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '0000';
    参考:
    修改密码机制
    解决MySQL8.0报错:Unknown system variable ‘validate_password_policy’

(3) 数据库报错

  1. 字符/数字插入都用 %s,而不用%d

    参考:Python MySQLdb issues (TypeError: %d format: a number is required, not str)

  2. 常用查错指令

清除所有数据:truncate table dd_list;
查看数量:select count(*) from dd_list;

(4)一万多个页面,抓到2000多就停了

  1. 怀疑:点击“下一页”翻页的方式不行
    (验证:将点击“下一页”翻页换成“url拼接”也不行)
  2. 怀疑:出版社一次传多了
    (验证:一次抓一个也不行)
  3. 怀疑:访问过于频繁
    (验证:开了代理也不行)

(5)抓评论,最后一页解析错误

把 range(1,page+1)改成range(1,page+2),这样就能抓全了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值