项目进度记录


前言

在项目中我所负责的部分是爬虫部分,在这一周我主要的工作是尝试简单的爬虫爬取网站数据,熟悉各个主流舆论网站的爬取过程,以便与后面项目更好的对接。


一、百度新闻

我们观察到百度新闻在网页上显示的页数是20页,即总网页数大概是200多个,且对于时间的观察得知百度新闻大概是几天更新一次,所以对百度新闻的爬取策略是先爬取下所有网页及其时间戳,待几天后更新数据。
首先我们对百度新闻的网页机器时间戳进行爬取,获取其网址,标题以及时间戳

相关代码

代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
from pyquery import PyQuery as pq
import pandas as pd
import re

# 让网页不加载图片
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images":2}
chrome_options.add_experimental_option("prefs",prefs)

browser = webdriver.Chrome(options=chrome_options)
wait = WebDriverWait(browser, 10)

urls_list = []
title_list = []
time_list = []
urls = 'https://www.baidu.com/s?rtt=1&bsst=1&cl=2&tn=news&rsv_dl=ns_pc&word=%E5%B1%B1%E4%B8%9C%E5%A4%A7%E5%AD%A6&x_bfe_' \
       'rqs=03E80000001&x_bfe_tjscore=0.100000&tngroupname=organic_news&newVideo=12&pn='

# 根据page翻页
def next_page(page):
    # 解决加载超时出错
    try:
        browser.get(urls+str(page))
        sleep(1)
        # 等待加载出底部页面信息加载出来
        total = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '#page > div'))
        )
    except TimeoutError:
        return next_page()


# 获取网页信息
def get_urls():
    try:
        # 拉动滚轴使页面加载底端的页面元素
        browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
        sleep(2)
        # 等待最后一个商品加载出来
        # 获取网页源码
        html = browser.page_source
        doc = pq(html)
        # id是#
        items = doc('.news-title_1YtI1').items()
        # enumerate()枚举计算,记录新闻的链接
        for index, i in enumerate(items):
            urls_list.append(i(' a').attr('href'))
            if len(i(' a').text()) == 0:
                title_list.append(" ")
            else:
                title_list.append(i(' a').text())
        items = doc('.news-source').items()
        # enumerate()枚举计算,记录新闻的时间戳
        for index, i in enumerate(items):
            time_list.append(i('.c-color-gray2').text())
    except:
        get_urls()



def main():
    for i in range(0, 18):
        next_page(i * 10)
        get_urls()
    dframe = pd.DataFrame({'网址': urls_list, '标题':title_list, '时间戳': time_list})
    dframe.to_csv('baidu_urls.csv', index=False, sep=',', encoding='utf_8_sig')


if __name__ == '__main__':
    main()

二.今日头条

对于今日头条的爬取策略和百度新闻的爬取策略大致相同,二者的更新频率大致相同,但是今日头条获取新闻需要与百度新闻有所不同,因为今日头条是滑轮向下滚动获取新闻,所以我们要用程序模拟浏览器操作。

相关代码

代码如下:

chrome_options = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images":2}
chrome_options.add_experimental_option("prefs",prefs)

browser = webdriver.Chrome(options=chrome_options)
wait = WebDriverWait(browser, 10)

urls_list = []
title_list = []
time_list = []
urls = 'https://www.toutiao.com/search/?keyword=%E5%B1%B1%E4%B8%9C%E5%A4%A7%E5%AD%A6'

# 根据page翻页
def search():
    # 解决加载超时出错
    try:
        browser.get(urls)
        sleep(1)
        # 等待加载出页面信息加载出来
        wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, 'body > div > div.y-box.container >'
                                                             ' div.y-left.index-middle > div.feedBox > div > div'))
        )
    except TimeoutError:
        return search()


# 获取网页信息
def get_urls():
    try:
        # 拉动滚轴使页面加载底端的页面元素
        for i in range(8):
            browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
            sleep(2)
        # 等待最后一个商品加载出来
        # 获取网页源码
        html = browser.page_source
        doc = pq(html)
        # id是#
        items = doc('.articleCard').items()
        # enumerate()枚举计算,记录新闻的链接
        for index, i in enumerate(items):
            urls_list.append('https://www.toutiao.com' + i('.link.title').attr('href'))
            title_list.append(i('.J_title').text())
            time_list.append((i('.lbtn').text()))
    except:
        get_urls()



def main():
    search()
    get_urls()
    dframe = pd.DataFrame({'网址': urls_list, '标题':title_list, '时间戳': time_list})
    dframe.to_csv('headline_urls.csv', index=False, sep=',', encoding='utf_8_sig')


if __name__ == '__main__':
    main()

总结

这样的数据量对于整个项目来说肯定是不够的,所以在这之后考虑用二级爬取获取网页内的相应内容,以此来获取更多的数据量。并且 考虑用scrapy爬虫框架爬取网页,定义itcast.py爬虫以及items.py来定义数据结构,再通过管道来储存,这样子能够提高爬虫编写效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目进度管理系统是一种用于监控和控制项目进展的工具。它可以帮助项目管理人员有效地跟踪项目的每个阶段和任务的完成情况,并及时发现和解决潜在的延期或风险。 具体来说,项目进度管理系统可以提供以下功能: 1. 进度计划:项目管理人员可以根据项目需求和时间限制创建项目进度计划。该系统可以帮助他们确定每个任务的优先级和关联性,并实时更新和分配资源。 2. 任务管理:在项目进度管理系统中,每个任务都可以被分配给不同的团队成员,并且可以设置截止日期和里程碑。项目管理人员可以根据实际情况检查任务完成情况,并根据需要进行调整。 3. 进度跟踪:系统可以记录每个任务的实际完成日期,并自动计算每个任务的进度百分比。这将使项目管理人员能够了解项目是否按计划进行,并及时采取措施解决潜在的进度滞后。 4. 风险管理:项目进度管理系统还可以帮助识别和评估可能影响项目进度的风险因素。通过设定警报和提醒,管理人员可以在风险发生之前采取预防措施。 5. 报告和沟通:项目进度管理系统可以生成定制化的报告,展示项目的进展情况和关键指标。这些报告可以与团队成员和利益相关者共享,以便及时进行沟通和协调。 综上所述,项目进度管理系统是一个强大的工具,可以帮助项目管理人员有效地监控和控制项目进度。通过提供全面的任务管理、进度跟踪、风险管理和报告功能,它可以帮助团队实现项目目标,并保证项目按时完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值