文档章节

python抓取头条文章

o
 osc_x4h57ch8
发布于 2018/04/23 23:47
字数 268
阅读 0
收藏 0

python抓取头条美文并存储到mongodb

# Author:song
from multiprocessing import Pool
from urllib.parse import urlencode
import requests
import json
from requests import RequestException
from bs4 import BeautifulSoup
import re
import pymongo
client = pymongo.MongoClient('localhost',connect=False)
db = client['toutiaowenzhang']

def get_index(offset):
    data = {
        'offset': offset,
        'format': 'json',
        'keyword': '美文',
        'autoload': 'true',
        'count': 20,
        'cur_tab': 1,
        'from':'search_tab'
    }
    url = 'https://www.toutiao.com/search_content/?'+urlencode(data)
    response = requests.get(url)
    try:
        if response.status_code == 200:
            return response.text
        else:
            return None
    except RequestException:
        return None

def get_urls(html):
    data = json.loads(html)
    if data and 'data' in data.keys():
        for item in data.get('data'):
            yield item.get('article_url')

def get_index_detail(url):
    response = requests.get(url)
    try:
        if response.status_code == 200:
            return response.text
        else:
            return None
    except RequestException:
        return None

def parse_detail(html):
    try:
        soup = BeautifulSoup(html,'lxml')
        title = soup.select('title')[0].get_text()
        compile_allarticle= re.compile('content.*?<div&gt(.*?)</div>',re.S)
        allarticle = re.findall(compile_allarticle,html)
        # article =re.sub('(<.*?<span>)','',allarticle[0])#正则匹配上不需要的那部分
        article =re.sub('[a-zA-Z0-9/#;&\._]','',str(allarticle)).strip()#直接把字母数字全部替换
        data = {
            'title':title,
            'article':article
        }
        return data
    except TypeError:#解决出现了404界面
        pass
def save_to_mongodb(result):
    if db['toutiaowenzhang'].insert(result):
        print('successful')
    else:
        print('fail')

def main(offset):
    html = get_index(offset)
    items = get_urls(html)
    for item in items:
        if item:
            ab = get_index_detail(item)
            result = parse_detail(ab)
            save_to_mongodb(result)
if __name__=='__main__':
    groups = [x*20 for x in range(3)]
    pool = Pool()
    pool.map(main,groups)

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

在云函数 SCF 里为 Next.js 跑 SSR

很多时候我们都希望首屏速度快,SEO 友好,那么相比于客户端渲染,SSR 渲染将是这方面的优势。Next.js、Nuxt.js 都是 SSR 框架。本篇文章将介绍 Next.js。 通常我们在部署 SSR 的时候,会担心...

腾讯云Serverless
今天
19
0
一文带你初窥软件测试行业

三大原始问题一——软件测试是什么? 在一定条件下对软件系统进行审核、运行、评估,检验软件系统是否满足规定需求或者找出预期结果与实际结果之间的差别。为软件产品的质量和评价提供依据。...

a伟正是在下
今天
17
0
如何避免APK文件的反向工程? - How to avoid reverse engineering of an APK file?

问题: I am developing a payment processing app for Android, and I want to prevent a hacker from accessing any resources, assets or source code from the APK file. 我正在开发适用......

富含淀粉
今天
13
0
python 抓取 微信公众号文章

1、下载 Fiddler 安装 具体操作传送门 2、第一步已完成,入门开始吧 首先确保有微信客户端(推荐PC,移动端会多一些操作) 启动微信、Fiddler ,然后找到需要抓取的公众号(还是关注一下吧,...

acclea
今天
9
0
JS深拷贝

let arr1 = [1, 2, 3, 4, { name: 'hh'}]/浅克隆****/// 1,展开运算符let arr2 = [...arr1]// 2.splicelet arr3 = arr1.splice(0)/深克隆****/// 1.基...

何祯粮
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部