思路

通过爬虫爬取本网站的文章标题、简介和链接。爬取的时候注意下需要解析的标签对就行。

简单的思路就是:抓取单页 -> 解析信息 -> 保存文件 -> 单线程循环/多线程循环。

pyquery库:pyquery库是jQuery的Python实现,能够以jQuery的语法来操作解析 HTML 文档,易用性和解析速度都很好,和它差不多的还有BeautifulSoup,都是用来解析的。相比BeautifulSoup完美翔实的文档,虽然PyQuery库的文档弱爆了, 但是使用起来还是可以的,有些地方用起来很方便简洁。

代码如下

# 爬取笨猪网站的文章
import time
import json
import requests
from pyquery import PyQuery
from multiprocessing import Pool
from requests.exceptions import RequestException


def get_one_page(url):
    # 获取一个页面
    headers = {"User-Agent": "Mozilla/5.0"}
    try:
        response = requests.get(url, headers=headers)
        if response.status_code != 200:
            return None
    except RequestException:
        return None
    return response.text


def pase_one_page(text):
    # 解析页面内容
    doc = PyQuery(text)
    for info in doc(".kratos-hentry").items():
        dct = {}
        dct["标题"] = info.find("h2 a").text()
        dct["简介"] = info.find(".kratos-entry-content-new p").text()
        dct["链接"] = info.find("h2 a").attr("href")
        yield dct


def write_to_file(content):
    # 写入文件
    # 写入文件的路径
    with open("G:\\javaio\\data.txt", "a", encoding="utf-8") as f:
        f.write(json.dumps(content, ensure_ascii=False)+"\n")

def main(offset):
    # 程序入口
    url = "https://www.benzhu.xyz/index.php/page/{offset}/"
    text = get_one_page(url.format(offset=offset))
    for item in pase_one_page(text):
        write_to_file(item)

if __name__ == "__main__":
    #start开始时间
    start = time.time()
    #单独获取
    # main(1)
    # 单线程循环抓取,翻页
    # for i in range(1,6):
    #     main(i)

    # 多进程抓取,翻页 获取1-5页的数据
    pool = Pool()
    pool.map(main, [i for i in range(1,6)])
    #end结束时间
    end = time.time()
    #输出程序运行了多少时间
    print(end-start)

效果图: