大橙子网站建设,新征程启航

为企业提供网站建设、域名注册、服务器等服务

php数据采集类 php 采集

怎么用php采集网站数据

简单的分了几个步骤:

创新互联是一家集网站建设,鹤山企业网站建设,鹤山品牌网站建设,网站定制,鹤山网站建设报价,网络营销,网络优化,鹤山网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

1、确定采集目标

2、获取目标远程页面内容(curl、file_get_contents)

3、分析页面html源码,正则匹配你需要的内容(preg_match、preg_match_all),这一步最为重要,不同页面正则匹配规则不一样

4、入库

PHP或者python进行数据采集和分析,有什么比较成熟的框架

Python:

1.requests 很好用的http库,中文文档:Requests: 让 HTTP 服务人类

2.BeautifulSoup 很好用很强大的html解析库,中文文档:Beautiful Soup 4.4.0 文档

3.Scrapy 知名爬虫框架,中文文档:Scrapy 0.25 文档

PHP数据采集问题(相对地址转绝对地址)

其实用不着这么麻烦的,采集时,你看到的图片路径是相对地址,是相对当前域名的一个相对路径而已,你只要在前面加上

http://当前域名(采集内容的域名,比如zhidao.baidu.com)/

就是它的绝对地址了,

就像/abc.jpg一样

http://当前域名(采集内容的域名,比如zhidao.baidu.com)/abc.jpg就是绝对地址了

没必要搞复杂

php采集数据怎么做啊?

用fopen/file/file_get_contents/curl之类的函数将远程页面获得内容, 采用正则或过滤之类的获得自己所需要的东西, 最好写入相应的数据库保存起来。

php采集大数据的方案

1、建议你读写数据和下载图片分开,各用不同的进程完成。

比如说,取数据用get-data.php,下载图片用get-image.php。

2、多进程的话,php可以简单的用pcntl_fork()。这样可以并发多个子进程。

但是我不建议你用fork,我建议你安装一个gearman worker。这样你要并发几个,就启几个worker,写代码简单,根本不用在代码里考虑thread啊,process等等。

3、综上,解决方案这样:

(1)安装gearman worker。

(2)写一个get-data.php,在crontab里设置它每5分钟执行一次,只负责读数据,然后把读回来的数据一条一条的扔到 gearman worker的队列里;

然后再写一个处理数据的脚本作为worker,例如叫process-data.php,这个脚本常驻内存。它作为worker从geraman 队列里读出一条一条的数据,然后跟你的数据库老数据比较,进行你的业务逻辑。如果你要10个并发,那就启动10个process-data.php好了。处理完后,如果图片地址有变动需要下载图片,就把图片地址扔到 gearman worker的另一个队列里。

(3)再写一个download-data.php,作为下载图片的worker,同样,你启动10个20个并发随便你。这个进程也常驻内存运行,从gearman worker的图片数据队列里取数据出来,下载图片

4、常驻进程的话,就是在代码里写个while(true)死循环,让它一直运行好了。如果怕内存泄露啥的,你可以每循环10万次退出一下。然后在crontab里设置,每分钟检查一下进程有没有启动,比如说这样启动3个process-data worker进程:

* * * * * flock -xn /tmp/process-data.1.lock -c '/usr/bin/php /process-data.php /dev/null 21'

* * * * * flock -xn /tmp/process-data.2.lock -c '/usr/bin/php /process-data.php /dev/null 21'

* * * * * flock -xn /tmp/process-data.3.lock -c '/usr/bin/php /process-data.php /dev/null 21'

不知道你明白了没有


文章题目:php数据采集类 php 采集
本文链接:http://dzwzjz.com/article/hhepgh.html
在线咨询
服务热线
服务热线:028-86922220
TOP