Giter Club home page Giter Club logo

webspider's Introduction

如何使用

  • 按照官方教程安装 pdm, 使用pdm管理python包是因为python的原生包管理和Node相比实在是灾难,输出的requirements.txt有大堆普通开发者或使用者不想关注的细节(包),无法分清包依赖关系

  • git clone下载仓库内容

  • 在仓库根目录执行pdm install

  • 安装过程中,可以从Docker的Elasticsearch容器中将.crt文件复制到本仓库中

  • (可选)如果需要爬虫时自动将数据存储到后台的数据库,在README.md同层目录创建.env文件,配置如下内容

    # change the following "CHANGEME" to real params
    USERNAME=CHANGEME
    PASSWORD=CHANGEME
    
    HOST=localhost
    PORT=9200
    URL=https://${HOST}:${PORT}
    
    ES_INDEX=CHANGEME
    CERT="ca.crt"
    

后台定时爬虫

  • 找到start_crawl.py所在位置并用 pm2 后台管理
  • 找到当前虚拟环境所在地址(绝对路径),替代下面的 /path/to/venv/bin/python

代码样例:pm2 start start_crawl.py --interpreter=/path/to/venv/bin/python

该样例会在每天默认时间开启全网页爬虫。你也可通过 python start_crawl.py -h获取更多参数相关信息

单次爬虫

  1. 进入虚拟环境并启动虚拟环境:source developEnv/bin/activate(退出虚拟环境用deactivate
  2. 进入对应的项目文件夹中(如 venv/webSpider,即scrapy.cfg存在文件夹),可执行对应 spider,如scrapy crawl BATCM -O output/result.json。**注意:**使用默认设置会爬取某网页 2 个子页面内包含的所有子网页,而且为了防止被反爬虫限制了爬取速度,速度较慢,预计需 5 分钟

常见问题

被创宇云防御(云 WAF 类)拦下

过一两分钟可继续正常访问,注意要到文件根目录(含scrapy.cfg)运行scrapy shell;或修改 User-Agent,如scrapy shell -s USER_AGENT='Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)' 'http://zyj.beijing.gov.cn/sy/tzgg/'

如何手动批量导入爬取的 json 格式数据

新回答:在用 jq 对 json 解码后,用官方bulk api(此处给的是 Node.js 版本)。原回答废弃原因是,对于 jq 转换成的\",echo、printf 等其他输出函数在 pipe 输出时会将 json 值中的\"在 bulk 前就转换成",从而导致输入到 Elasticsearch 中出错。且暂时无解,'\'等常见转义字符可以取消转换,但暂未见到针对\"解决方式的回答。

原回答(废弃不用):导入[{},{}]类型 Json 文件,参考此 elasticsearch 回答使用elastic bulk REST API

网络异常,Console 出现大量报错

如出现大批量诸如 "OSError: [Error 101] Network is unreachable" 之类的错误,静等 1~2 分钟,等错误所有都跳过即可。在不用“梯子”的情况下,fake-useragent无法访问 w3schools, heroku 之类的数据源,且会多次重试链接。虽然无法使用随机 UA,已设置了默认的 UA,错误不用理会。

注意事项

  1. 建议熟悉 scrapy 库(可参照scrapy 文档),并使用scrapy shell协助调试(记得要修改 Shell 的 User-Agent)。
  2. 用 scrapy 库时记得要用 virtualenv 或 conda 等创建虚拟环境
  3. 涉及正则部分可阅读 learn-regex-zh,并借助诸如 regex101scrapy command line 工具来辅助获取内容
  4. 如何将\uXXXX格式代码转换为对应的汉字:安装jq,并执行诸如cat in.json | jq > out.json代码。另外,强烈推荐学一学 jq, 该Tutorial10 分钟。jq 能解决非常多常见的 JSON 转换问题,实属 JSON 利器
  5. 本仓库 python 的linterformatter分别使用了flake8black

爬虫目录

详见crawling-catalog.md

webspider's People

Contributors

gricn avatar lions-sky avatar

Forkers

gricn lions-sky

webspider's Issues

安全性更新

修复潜在XSSCSRF漏洞
master分支在33edc914c9bb5f419a9001a8d000f0d8a3ef7463及之前都存在这些类型的漏洞

国家中医药管理局 附件bug

image

国家中医药管理局办公室关于对“古代经典名方目录制定的遴选范围和遴选原则”征求意见的通知

链接没有问题,能正常下载。 UI问题

爬取吉林省中医药管理局内容

按照以下内容爬取,爬取成功后将内容放入仓库的爬虫目录中

### 吉林省中医药管理局(JLTCM)

截至 2021-08-20 [吉林省中医药管理局](http://jltcm.jl.gov.cn/tzgg/) 官网 无 `robots.txt` 

爬取内容:

需要爬取各栏目下所有内容:

- 新闻中心                   http://jltcm.jl.gov.cn/xwzx/
- 通知公告                   http://jltcm.jl.gov.cn/tzgg/
- 政府信息公开            http://jltcm.jl.gov.cn/zwgk/

使用Redis避免内容重写

  1. 根据URL发布日期这2项指标判断数据库是否已有该网页内容。
  2. 增加参数判断是否要覆写。(覆写利于替换错误格式的内容)

用Redis是因为Elasticsearch写入性能和查找性能不及Redis

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.