WebCollector爬取优快云博客

本文介绍如何使用爬虫框架高效抓取新闻与博客内容,重点讲解了如何配置爬虫以避免重复抓取,并演示了如何利用css选择器抽取所需数据。

新闻、博客爬取是数据采集中常见的需求,也是最容易实现的需求。一些开发者利用HttpClient和Jsoup等工具也可以实现这个需求,但大多数实现的是一个单线程爬虫,并且在URL去重和断点爬取这些功能上控制地不好,爬虫框架可以很好地解决这些问题,开源爬虫框架往往都自带稳定的线程池、URL去重机制和断点续爬功能。

爬虫框架往往也会自带网页解析功能,支持xpath或css选择器(底层多用Jsoup实现)。

使用爬虫框架,用户只需要告诉框架大致的爬取范围,以及每个页面的抽取规则,即可完成对网页的爬取,并抽取其中的结构化数据。

import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;
import cn.edu.hfut.dmic.webcollector.model.Page;
import cn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler;

public class TutorialCrawler extends BreadthCrawler {

    public TutorialCrawler(String crawlPath, boolean autoParse) {
        super(crawlPath, autoParse);
    }

    /*
        可以往next中添加希望后续爬取的任务,任务可以是URL或者CrawlDatum
        爬虫不会重复爬取任务,从2.20版之后,爬虫根据CrawlDatum的key去重,而不是URL
        因此如果希望重复爬取某个URL,只要将CrawlDatum的key设置为一个历史中不存在的值即可
        例如增量爬取,可以使用 爬取时间+URL作为key。

        新版本中,可以直接通过 page.select(css选择器)方法来抽取网页中的信息,等价于
        page.getDoc().select(css选择器)方法,page.getDoc()获取到的是Jsoup中的
        Document对象,细节请参考Jsoup教程
    */
    @Override
    public void visit(Page page, CrawlDatums next) {
        if (page.matchUrl("http://blog.youkuaiyun.com/.*/article/details/.*")) {
            String title = page.select("div[class=article_title]").first().text();
            String author = page.select("div[id=blog_userface]").first().text();
            System.out.println("title:" + title + "\tauthor:" + author);
        }
    }

    public static void main(String[] args) throws Exception {
        TutorialCrawler crawler = new TutorialCrawler("crawler", true);
        crawler.addSeed("http://blog.youkuaiyun.com/.*");
        crawler.addRegex("http://blog.youkuaiyun.com/.*/article/details/.*");

        /*可以设置每个线程visit的间隔,这里是毫秒*/
        //crawler.setVisitInterval(1000);
        /*可以设置http请求重试的间隔,这里是毫秒*/
        //crawler.setRetryInterval(1000);

        crawler.setThreads(30);
        crawler.start(2);
    }

}

上面的例子将结构化数据输出到标准输出流,在实际中,结构化数据应该被输出到mysql等存储中,可以参考教程:使用Spring JDBC持久化WebCollector爬取的数据

通过捐款支持WebCollector

维护WebCollector及教程需要花费较大的时间和精力,如果你喜欢WebCollector的话,欢迎通过捐款的方式,支持开发者的工作,非常感谢!

你可以使用支付宝钱包扫描下方的二维码进行捐款, 或者通过向支付宝帐号 hujunxianligong@126.com转帐进行捐款。

为了爬取优快云博客上关于Python教程的内容,你需要了解并遵守网站的robots.txt协议以及相关的法律法规,并合理利用技术手段。这里给你一个简化的流程和一些基础的概念。 ### 准备工作 1. **安装依赖库** - `requests` 或者 `aiohttp`: 用于发送HTTP请求获取网页内容。 - `BeautifulSoup4 (bs4)` 或者 `lxml`: 解析HTML文档提取数据。 - 可选工具如Selenium如果页面需要JavaScript渲染的话。 2. **分析目标页面结构** - 打开浏览器开发者模式(F12),查看优快云博客列表页源码,找到存放文章标题、链接等信息的具体标签及属性名。 3. **编写程序** ```python import requests from bs4 import BeautifulSoup def fetch_csdn_python_tutorials(): url = "https://blog.csdn.net/?type=python" headers = { 'User-Agent': 'Mozilla/5.0 ...', # 完整填写适合的User-Agent字段 } response = requests.get(url=url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.text,'html.parser') articles = [] for article in soup.select('div.blog-list-box'): title_tag = article.find("h4").find("a") link = title_tag['href'] title = title_tag.string.strip() summary = article.find("p", class_="content-text").get_text().strip() print(f"Title:{title}\nLink:[{link}]\nSummary:\n{summary}\n---\n") articles.append({ "title": title, "link": link, "summary": summary }) return articles else: raise Exception("Failed to load page") if __name__=='__main__': try: tutorials = fetch_csdn_python_tutorials() except Exception as e: print(e) ``` 请注意以上代码仅为示例,在实际应用时还需要根据具体的页面结构调整选择器路径以及其他细节处理。同时也要注意频率控制避免给服务器造成过大压力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值