爬取基础2

Posted shadows24

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬取基础2相关的知识,希望对你有一定的参考价值。


1.取出一个新闻列表页的全部新闻 包装成函数。

2.获取总的新闻篇数,算出新闻总页数。

3.获取全部新闻列表页的全部新闻详情。

import requests
from bs4 import BeautifulSoup
from datetime import datetime
import re


# 获取新闻点击次数
def getNewsId(url):
    newsId = re.findall(r\'\\_(.*).html\', url)[0][-4:]
    clickUrl = \'http://oa.gzcc.cn/api.php?op=count&id={}&modelid=80\'.format(newsId)
    clickRes = requests.get(clickUrl)
    # 利用正则表达式获取新闻点击次数
    clickCount = int(re.search("hits\'\\).html\\(\'(.*)\'\\);", clickRes.text).group(1))
    return clickCount


# 获取新闻细节
def getNewsDetail(newsUrl):
    resd = requests.get(newsUrl)
    resd.encoding = \'utf-8\'
    soupd = BeautifulSoup(resd.text, \'html.parser\')

    content = soupd.select(\'#content\')[0].text
    info = soupd.select(\'.show-info\')[0].text
    # 调用getNewsId()获取点击次数
    count = getNewsId(newsUrl)
    # 识别时间格式
    date = re.search(\'(\\d{4}.\\d{2}.\\d{2}\\s\\d{2}.\\d{2}.\\d{2})\', info).group(1)
    # 识别一个至三个数据
    if(info.find(\'作者:\')>0):
        author = re.search(\'作者:((.{2,4}\\s|.{2,4}、){1,3})\', info).group(1)
    if(info.find(\'审核:\')>0):
        check = re.search(\'审核:((.{2,4}\\s){1,3})\', info).group(1)
    if(info.find(\'来源:\')>0):
        sources = re.search(\'来源:(.*)\\s*摄|点\', info).group(1)
    # 用datetime将时间字符串转换为datetime类型
    dateTime = datetime.strptime(date, \'%Y-%m-%d %H:%M:%S\')
    # 利用format对字符串进行操作
    print(\'发布时间:{0}\\n作者:{1}\\n审核:{2}\\n来源:{3}\\n点击次数:{4}\'.format(dateTime, author, check, sources, count))
    print(content)

# 获取列表页新闻
def getListPage(listUrl):
    res = requests.get(listUrl)
    res.encoding = \'utf-8\'
    soup = BeautifulSoup(res.text, \'html.parser\')

    for new in soup.select(\'li\'):
        if len(new.select(\'.news-list-title\')) > 0:
            title = new.select(\'.news-list-title\')[0].text
            description = new.select(\'.news-list-description\')[0].text
            newsUrl = new.select(\'a\')[0][\'href\']

            print(\'标题:{0}\\n内容:{1}\\n链接:{2}\'.format(title, description, newsUrl))
            # 调用getNewsDetail()获取新闻详情
            getNewsDetail(newsUrl)
            break

# 获取新闻总页数
def getListTotalNumber(firstUrl):
    res = requests.get(firstUrl)
    res.encoding = \'utf-8\'
    soup = BeautifulSoup(res.text, \'html.parser\')
    listCount = int(soup.select(\'.a1\')[0].text.rstrip(\'条\')) // 10 + 1
    return listCount

firstUrl = \'http://news.gzcc.cn/html/xiaoyuanxinwen/\'
getListPage(firstUrl)
# 获取新闻总页数
n=getListTotalNumber(firstUrl)

for i in range(2,n):
    listUrl= \'http://news.gzcc.cn/html/xiaoyuanxinwen/{}.html\'.format(i)
    getListPage(listUrl)

  

 

 

4.找一个自己感兴趣的主题,进行数据爬取,并进行分词分析。不能与其它同学雷同。

import requests
from bs4 import BeautifulSoup

# 获取新闻细节
def getNewsDetail(newsUrl):
    resd = requests.get(newsUrl)
    resd.encoding = \'utf-8\'
    soupd = BeautifulSoup(resd.text, \'html.parser\')
    content = soupd.select(\'.cont\')[0].text.rsplit("复仇者联盟2:奥创纪元下载地址:http://www.80smp4.net/mp4_3gp/26733/")[0]
    print(\'内容:{}\'.format(content))

# 获取列表页新闻
def getListPage(listUrl):
    res = requests.get(listUrl)
    res.encoding = \'utf-8\'
    soup = BeautifulSoup(res.text, \'html.parser\')

    for new in soup.select(\'div\'):
        if len(new.select(\'.ph_u\')) > 0:
            description = new.select(\'.title\')[0].text.split()[0]
            newsUrl = new.select(\'a\')[0][\'href\']
            # print(\'标题:{0}\\n内容:{1}\\n链接:{2}\'.format(title, description, newsUrl))
            # 调用getNewsDetail()获取新闻详情
            print(\'片名:{0}\\n连接:{1}\'.format(description,newsUrl))
            getNewsDetail(newsUrl)
            break

firstUrl = \'http://www.80smp4.net/movie/\'
getListPage(firstUrl)

  

 

 

以上是关于爬取基础2的主要内容,如果未能解决你的问题,请参考以下文章

python小白学习记录 多线程爬取ts片段

使用Python爬取一个网页并解析

[vscode]--HTML代码片段(基础版,reactvuejquery)

Python抓取电影天堂, 零基础都可以学? 源码&视频教程, 大赞!

Python零基础爬取网页数据并导出Excel

爬取艺龙酒店基础资料