编写函数完成信息抓取

import requests
from bs4 import BeautifulSoup
from datetime import datetime
import re
import json
#获取评论数的函数
def getComment(newsurl):
    m = re.search('doc-i(.+).shtml',newsurl)
    newsid = m.group(1)
    commentURL = 'http://comment5.news.sina.com.cn/page/info?version=1&format=js&channel=gn&newsid=comos-{}&group=&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=20&jsvar=loader_1500520949298_3273313'
    comments = requests.get(commentURL.format(newsid))
    jd = json.loads(comments.text.strip('var loader_1500398040328_33412017='))
    return jd['result']['count']['total']

#获取新闻详情的函数
def getNewsDetail(newsurl):
    result = {}
    res = requests.get(newsurl)
    res.encoding = 'utf-8'
    soup = BeautifulSoup(res.text,'html.parser')
    result['title'] = soup.select('#artibodyTitle')[0].text
    result['newssource'] = soup.select('.time-source span a')[0].text
    result['title'] = soup.select('#artibodyTitle')[0].text
    timesource = soup.select('.time-source')[0].contents[0].strip()
    result['dt'] = datetime.strptime(timesource,'%Y年%m月%d日%H:%M')
    result['article'] = ' '.join([p.text.strip() for p in soup.select('#artibody p')[:-1]])
    result['editor'] = soup.select('.article-editor')[0].text.strip('责任编辑 :')
    result['conments'] = getComment(newsurl)
    return result

调用函数

getNewsDetail('http://news.sina.com.cn/c/nd/2017-07-18/doc-ifyiamif3452348.shtml')

以上的步骤可以分为

  1. 创建一个对象用来保存将获取的数据
  2. 创建请求获取响应
  3. 转为方便使用的soup对象
  4. 选择所需要的内容并处理

获取翻页规律
并非所有网页都是同步加载的,也有很多网页是异步加载的。例如滚动时动态加载,或者点击翻译时再加载。这个时候doc下不一定有所有信息,这个时候可以看看SHR选择栏,如果也没有可能就是JS中。可以查找看。可以试试筛选相关的关键词比如滚动的关键词时roll。有可能找到相关的内容,然后再找规律。

你可能感兴趣的:(编写函数完成信息抓取)