今日mysql操作的若干问题(scrapy爬虫反爬知识点)

round 1:
运行:delete FROM test.comment250 where movie_id="美丽人生";出现报错

0 45 10:47:27 delete FROM test.comment250 where movie_id="美丽人生" Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 0.000 sec
原因:MySql运行在safe-updates模式下,该模式会导致非主键条件下无法执行update或者delete命令。
解决:SET SQL_SAFE_UPDATES = 0;修改下数据库模式
delete FROM test.comment250 where movie_id=“美丽人生”;
最终运行成功。
round 2:
一直在试图寻找豆瓣短评的唯一id来设置主键:
比如在数据库中用data-cid作为唯一id问的内容如下,但是
(短评页面1)(https://movie.douban.com/subject/1292063/comments?start=80&limit=20&status=P&sort=new_score)
(短评页面2)(https://movie.douban.com/subject/1292063/comments?start=100&limit=20&status=P&sort=new_score)
两个页面中出现了相同的短评。怪不得爬取的短评数往往会偏小。
在这里插入图片描述
**round3:**最终还是逃不过被豆瓣封ip的下场。然后去阿布云那找测试代理。
刚开始还是403返回,
(1)首先测试代理不好用,不能连接IP,应该不是
(2)后来换了user-agent,发现可以正常爬取。
(2)最后直接上了user-agent池。效果才好一些
纪念一下我的middlewares.py中的代理中的代码:

""" 阿布云ip代理配置,包括账号密码 """
# 阿布云scrapy 写法
import base64
import logging

proxyServer = "http://http-cla.abuyun.com:9030"
proxyUser = "xxxxxxxxxxxxxxxx"  # 购买后点击生成获得
proxyPass = "xxxxxxxxxxxxxxxx"  # 购买后点击生成获得
# for Python3
proxyAuth = "Basic " + base64.urlsafe_b64encode(bytes((proxyUser + ":" + proxyPass), "ascii")).decode("utf8")


class AbuyunProxyMiddleware(object):
    """ 阿布云ip代理配置 """

    def process_request(self, request, spider):
        request.meta["proxy"] = proxyServer
        request.headers["Proxy-Authorization"] = proxyAuth
        logging.debug('Using Proxy:%s' % proxyServer)

settings.py文件中:

DOWNLOADER_MIDDLEWARES = {
    # 'movie250.middlewares.Movie250DownloaderMiddleware': 543,
     'movie250.middlewares.AbuyunProxyMiddleware': 1,  # 启用阿布云代理
    }

round4:
数据库写入部分总是有些数据莫名其妙写入不了,目前猜测是数据库没有异步存储,跟不上爬虫速度的原因。
如何解决mysql阻塞的问题呢?而如果多次的测试爬虫,就会导致相同的数据不断累积,怎么实现增量爬取?
有人说用下面的方法:

  1. scrapy-deltafetch
  2. scrapy-crawl-once(与1不同的是存储的数据库不同)
  3. scrapy-redis
  4. scrapy-redis-bloomfilter(3的增强版,存储更多的url,查询更快)
    确实听说redis的原子性,还没用过。这次项目还是明天用twisted试试能不能解决。

上价值:
问题总是会有的。从刚开始仅仅只能爬top250的电影信息200来条到现在上w条的数据还是蛮有意思的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值