-
Notifications
You must be signed in to change notification settings - Fork 37
/
site.py.example
53 lines (44 loc) · 1.22 KB
/
site.py.example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
"""
抓取服务示例文件
参考:
xicidaili.py
kuaidaili.py
"""
# 引入必要库
from src.app.ip_get import IPGet, SiteResponse
from src.lib.structs import SiteData, SiteResponseData
# 定义抓取唯一 KEY
key = 'example'
@IPGet.config(key)
def config():
"""
服务配置,需指定 name 和 pages
:return:
"""
site = SiteData()
site.name = '服务名称'
site.pages = ['https://www.example.com'] # 要抓取的页面 list 类型
return site
@IPGet.parse(key)
def parse(resp: SiteResponse):
"""
解析每个 page 的内容,获取到 ip 和 port 后创建一个 SiteResponseData 对象,并通过 yield 方式返回
:param resp:
:return:
"""
items = resp.xpath('//tr')[1:]
for item in items:
try:
res = SiteResponseData()
res.ip = item.xpath('.//td[1]//text()')[0]
res.port = item.xpath('.//td[2]//text()')[0]
yield res
except Exception:
continue
if __name__ == '__main__':
"""
通过 IPGet 中的 test_crawl 方法,可以在当前文件测试当前的抓取服务
"""
from src.lib.func import run_until_complete
runner = IPGet.test_crawl(key)
run_until_complete(runner)