V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  caneman  ›  全部回复第 8 页 / 共 8 页
回复总数  156
1  2  3  4  5  6  7  8  
2019-05-08 13:49:59 +08:00
回复了 caneman 创建的主题 Python 算法:圆盘盖米问题(圆的密铺?)
2019-05-08 13:46:33 +08:00
回复了 caneman 创建的主题 Python 算法:圆盘盖米问题(圆的密铺?)
@fzy0728

我这里看没有啊

链接: https://i.imgur.com/IKjouyS.jpg



![avatar]( https://i.imgur.com/IKjouyS.jpg)
2019-05-08 13:17:32 +08:00
回复了 caneman 创建的主题 Python 算法:圆盘盖米问题(圆的密铺?)
大伙给点思路啊
2019-05-06 20:41:48 +08:00
回复了 caneman 创建的主题 Python Scrapy 效率瓶颈
@cxh116 谢谢,代理好像不是瓶颈,不加代理提升的速率也非常有限(大概就是去除了代理延迟级别的速度提升) redis 的那种方案确实提高了速率,是我之前写法太蠢了,所有的下一个页面链接都得等我上一个页面请求完毕才能获取,生生的变成了同步。(可是书上和网上都是这样来写的啊,寻找下一页的链接然后 yield ),不知道是我的理解问题,还是这样写本身就存在这种问题,我再多尝试尝试改一改,谢谢啦🙏。
2019-05-06 18:02:54 +08:00
回复了 caneman 创建的主题 Python Scrapy 效率瓶颈
2019-05-06 17:54:27 +08:00
回复了 caneman 创建的主题 Python Scrapy 效率瓶颈
@cxh116 是采用的异步 MySQL 存储的,很多页面是空数据的,所以瓶颈不在存储这一块,下面是主要代码。


def start_requests(self):
url = 'https://www.xxxx.com/'
longitude, latitude = get_next_coordinate( self.start_longitude, self.start_latitude)
data = get_form(longitude, latitude)
proxy = 'http://' + get_proxy()
yield FormRequest(url, method='POST', formdata=data, callback=self.parse, dont_filter=True, meta={'proxy':proxy,'download_timeout':3,'longitude':data['longitude'], 'latitude':data['latitude']})

def parse(self, response):
info_list = json.loads(response.text)
if info_list['Count']:
for item in info_list['list']:
item_loader = QiyeItemloader(item=QiyeItem())
item_loader.add_value('hash', item['Key'])
item_loader.add_value('name', item['Name'])
item_loader.add_value('longitude', response.meta['longitude'])
item_loader.add_value('latitude', response.meta['latitude'])
qiye_item= item_loader.load_item()
yield qiye_item
longitude, latitude = get_next_coordinate(response.meta['longitude'], response.meta['latitude'])
next_data = get_form(longitude, latitude)
yield FormRequest(response.url, method='POST', formdata = next_data, callback=self.parse, dont_filter=True, meta={'proxy':response.meta['proxy'],'download_timeout':3,'longitude':next_data['longitude'], 'latitude':next_data['latitude']})

我想的一种解决方案是把所有 URL 放在 redis 里面,然后在 start_requests 里面 while True:yield Request()
这样的问题我不知道我这样一直写会不会时间长了我的电脑就崩了。
我如何控制这个被 yield 的 Request 的数量?比如,在队列里面一直有 100 个 Request,每少一个就添一个,始终保持 Start_url 里面有 100 个待爬 URL,这样的情况下,我调 CONCURRENT_REQUESTS 的值,是不是就能真正的控制并发数了?
2019-05-06 10:34:07 +08:00
回复了 caneman 创建的主题 Python Scrapy 效率瓶颈
@renmu123 现在能得到所有的 url 了,我想着怎么能用 scrapy 高效抓取,scrapy 这么多年了 这样一个成熟的框架应该不至于解决不了这种问题。想先单机把 scrapy 性能发挥到极致,了解他的极限和瓶颈在哪里,然后再上分布式再接着进一步优化,计划的学习路线是这样的。
2019-05-06 10:30:29 +08:00
回复了 caneman 创建的主题 Python Scrapy 效率瓶颈
@zhijiansha 这个思路挺好的,谢谢啊
2019-05-05 17:26:03 +08:00
回复了 caneman 创建的主题 Python Scrapy 效率瓶颈
@AlloVince 非常感谢!您的这一番讲解能让我少走很多弯路,再次感谢!
2019-05-05 16:41:10 +08:00
回复了 zxq2233 创建的主题 程序员 这种链接需要用微信才能打开,如何用爬虫去爬?
ua 改成微信的 ua
2019-05-05 16:18:45 +08:00
回复了 caneman 创建的主题 Python Scrapy 效率瓶颈
@dingyaguang117 谢谢,我觉得问题在这儿,但是这个规则怎么建立没想好,4000W 级别,还要涉及到失效错误链接的处理,请问 scrapy-redis 是不是能解决我的问题?
2019-05-05 16:03:04 +08:00
回复了 caneman 创建的主题 Python Scrapy 效率瓶颈
@dingyaguang117 改变串行后呢,怎么提高效率,我总不能把 4000W 页面连接都写道 start_urls 里面吧?

其实我现在是有点不太明白 scrapy 是实现并发的原理,网上也没有找到很好的解释文档。按我的理解,它是通过 start_urls 来实现并发的,任何在 parse 里面写的 yield 都会存在上面的串行问题。

我能想到的是把 scrapy 和 redis 对接(单机对接),然后多个线程同时去取 url,然后同时去抓,关键是我不知道 scrapy 支不支持这种操作,也不知道能不能实现或者有没有现成的解决方案,以免重复造轮子或者根本就此路不通。。。

不过好像上面这种想法又回到了 scrapy 是如何实现并发的问题上了。。。。
2019-05-05 15:57:44 +08:00
回复了 caneman 创建的主题 Python Scrapy 效率瓶颈
@tozp 现在日抓 10-20W 级,有点跟不上需求,需求大概是日抓百万,但是不能分布式。。。不是不能用,是现在的问题是单机的性能远远的浪费了,无论是带宽还是性能,都远远的没有用到。
2019-05-05 15:37:55 +08:00
回复了 caneman 创建的主题 Python Scrapy 效率瓶颈
@locoz 总共大概有 4000W 页面,如果我找到了这 4000W 页面的列表,我要写在 start_urls 里面才能实现高并发吗?
之前没有接触过 Scrapy-redis,目前的情况是,单机,带宽还可以,IP/Cookie 等所有反爬措施均已解决,可以理解为网站无反爬站措施,这样的话,我该怎么样实现日抓百万呢?

想到的一种可行的方案是,把所有的 url 写入 redis,然后所有的请求从 redis 里面去取 url, 但是单机的情况下,如何实现并发?(就是不是一个请求结束后再去 redis 取下一个,而是多个线程(并发数)同时连接 redis 去取 url,然后这些个线程同时进行抓取)不太清楚 scrapy-redis 有没有解决这个问题。。。
2019-05-05 15:11:07 +08:00
回复了 caneman 创建的主题 Python Scrapy 效率瓶颈
@InternetExplorer 我试了调并发数并没有显著的影响到我的抓取速率,而且对方的站是绝对扛得住的(是个大站)。
这里我虽然写的很大,但是其实抓取频率并没有很高(所以才一直没改),而且抓取到的页面都是按顺序的,我觉得是不是我的抓取逻辑有问题,应该怎么样改善呢?
1  2  3  4  5  6  7  8  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2108 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 22ms · UTC 01:56 · PVG 09:56 · LAX 18:56 · JFK 21:56
Developed with CodeLauncher
♥ Do have faith in what you're doing.