本周公众号粉丝群答疑汇总_kafka

摄影:产品经理

鱼子酱

 

问题1:

[彤颜无忌] 提问:

各位 在做元素定位时 有没有方法根据文本信息模糊匹配来定位页面元素呢?

 

问题解答:

[青南] 

 

有,xpath有contains关键词。

//div/a[contains(text(), "xxx")]/@href

[彤颜无忌] 

contains 我记得好像是根据标签属性来定位的

我想定位 我这个div标签里的文本信息 模糊定位

       本周公众号粉丝群答疑汇总_问题解答_02        

[青南] 

都可以

 

标签属性用 contains(@xxx, "sss")

文本用 contains(text(), "yyy")

 

问题2:

[Simon] 提问:

求助:用协程,本地代理服务器,一个session 抓取网页,我想每5000个请求后,切换服务器,但我切换时,发现有些协程还没跑完,从而出现错误。估计是找到原来的链接了。我怎么判断5000个协程都结束了?这样可以根据这个条件再切换代理,就不会出现这样的错误了。

       本周公众号粉丝群答疑汇总_缓存_03        

 

问题解答:

[青南] 

 

放到一个列表里面,然后:

await asyncio.gather(*这个列表)

 

[Simon] 

出现错误的最后反馈

       本周公众号粉丝群答疑汇总_缓存_04        

[青南]

全部跑完了以后它才会返回

[Simon] 

内容很多,会不会很吃内存?

[青南] 

当然会

所以你可以一批一批来,例如每一批100个请求

 

问题3:

[彤颜无忌]  提问:

@青南 群主好  用selenium做自动化遇到问题 想请教一下群里的各位大神

https://iot.sctel.com.cn/cas/login?service=https://iot.sctel.com.cn/mf-dp/cas这个网站有反爬机制 我用群主发布的方法chromdriver可以正常打开 但是只要一操作元素定位好像就又被屏蔽了

 

问题解答:

[青南] 

因为它可以劫持find_element_by_xxx这些方法,一调用就会发现

[彤颜无忌] 

所以想请教一下 是否还有其他方法 可以避开

[青南] 

@彤颜无忌 你会javascript吗

[彤颜无忌] 

@青南 会点

我该怎么做 您能大概讲一讲吗?

[青南]

你先在正常的chrome里面,通过开发者工具的console 写javascript,你看看能不能选择节点

       本周公众号粉丝群答疑汇总_数据_05

你还可以使用用js选到节点以后,能不能调用click去点击某些超链接

 

[彤颜无忌]  

好 我先试试看

[青南] 

如果正常执行的话,你就可以通过selenium执行js来绕过它的检测

就不要用selenium自带的那些方法了

 

问题4:

[sunboy] 提问:

遇到个问题是kafka producer send 方法send之后会出现 kafka中实际上没有收到数据

 

问题解答:

[sunboy]

查了下说send 是异步的,可以使用get方法去同步

[青南]

因为kafka有一个缓存。要凑够一定数量或者过一定的时间,才会一批从发送。

不是异步,而是缓存。

可以用producer.flush()强行把缓存发送

[青南]

是缓存到本地然后发送是吧

[sunboy]

缓存到内存里面。

[sunboy]

如果没有达到缓存的量是不是说不会发送呢

[青南]

过一定的时间也会发。

[sunboy]

如果说我的爬虫爬了两条数据然后爬虫结束了,但是没发kafka,然后容器kill掉了,那么这样信息就丢失了对吗

一定的时间没有确定的秒数是吧

我最近就发现好多数据日志中有kakfa没有

南哥那我在每次发送之后然后直接flush一下,这样对于性能其他的有什么影响吗

[青南]

会变慢。

是程序自动结束还是强行手动杀死?

[sunboy]

那么和同步发送相比呢,直接send之后调用get一下呢那么和同步发送相比呢,直接send之后调用get一下呢

自动结束的

我是docker调度,增量抓取

[青南]

get更慢。因为你要发两次TCP请求。

.flush只发一次,。

爬完以后,你sleep 60秒再结束

[sunboy]

本周公众号粉丝群答疑汇总_元素定位_06

 

 

[青南]

休眠一段时间。

[sunboy]

ok,休眠是一个比较优质的方案

好的我试试,谢谢南哥

[青南]

你也可以在最后flush一下。

不用每次send都flush

 

End