聚茶吧的内容来源-Python爬虫

博主计划创建一个名为聚茶吧的网站,通过Python爬虫抓取其他茶叶主题站点的文章,目标是获取大约100万篇内容,以此丰富网站资料并吸引流量。文章介绍了聚茶吧爬虫的实现思路。
摘要由CSDN通过智能技术生成

聚茶吧-汇聚茶的地方

自己想着做一个以“茶”为主题的网站,从别的具有相同主题(茶叶)的站点上抓取文章,汇聚成一个站点,充实站点的内容, 靠内容取胜。名字就叫聚茶吧(域名是jucha8.com, 取"聚茶吧"的谐音)。准备使用爬虫抓取100万左右的文章,充实茶叶相关的内容,尽可能的引流吧……

python爬虫的实现

那么,聚茶吧爬虫代码是如何实现的呢?假设要抓取的站点是A,则:

import requests
from lxml import etree
import time
from threading import Thread

from app.models import Article


class Spider(Thread):
    def __init__(self, name, start, end):
        super(Spider, self).__init__()
        self.articles = []
        self._start = start
        self._end = end
        self.name = name

    def run(self):
        for i in range(self._start, self._end):
            url = 'http://www.a.com/category/show-{0}.html'.format(i)
            self.crawl(url)
        Article.save_many(self.articles)
        self.articles = []

    def crawl(self, url):
        print 'thread-%s' % self.name, url
        resp = requests.get(url)
        html = etree.HTML(resp.text)
        title_e = html.xpath(u'//h1')
        if not title_e:
            return
        title = title_e[0].text

        ps_list = html.xpath("//div[@id='article']")
        body = []
        if not ps_list:
            return
        ps = ps_list[0].xpath('string(.)')
        if ps.strip():
            paras = ps.strip().split('\n')
            for p in paras:
                body.append(u'<p>{0}</p>'.format(p))
            if len(title) > 128:
                title = title[:128]
            self.articles.append(Article(**{'title': title, 'body': u''.join(body)}).data)
        if len(self.articles) > 20:
            Article.save_many(self.articles)
            self.articles = []
            time.sleep(1)

if __name__ == '__main__':
    s1 = Spider(1, 2, 8600)
    s2 = Spider(2, 8600, 17200)
    s3 = Spider(3, 17200, 25800)
    s4 = Spider(4, 25800, 34300)
    s1.start()
    s2.start()
    s3.start()
    s4.start()
    s1.join()
    s2.join()
    s3.join()
    s4.join()

    print u'Done'

对数据库的操作,是基于我的一个开源项目: Hare来实现的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值