IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python网络爬虫与信息提取(14)—— 百度搜索关键字爬取并整理摘要、标题、关键字等 -> 正文阅读

[Python知识库]Python网络爬虫与信息提取(14)—— 百度搜索关键字爬取并整理摘要、标题、关键字等

前言

百度搜索的内容一般包含标题、摘要、网址、时间信息,本次主要实现根据搜索整理30页左右百度的搜索条例成csv文档。

原理

百度爬虫比较简单,模拟浏览器访问就可以爬取到所要的数据,访问某个关键字第几页的网址构成为:

"http://www.baidu.com/s?wd={}&pn={}".format(urllib.parse.quote(word),number)

之后就是解析对应的标签提取信息了。

因为要提取关键字,所以解析得到摘要后需要对摘要进行结巴分词,分词后使用停用词表去掉停用词,最后整理高频词语为关键词。

代码所用停用词表下载:
链接: https://pan.baidu.com/s/1SOMFPaQodZPUyJncQCo-Qw 提取码: 7ipf

代码

from bs4 import BeautifulSoup
import sys
import requests
import re
import importlib
import urllib
import jieba
from collections import Counter
import csv

importlib.reload(sys)
headers = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate, compress',
    'Accept-Language': 'en-us;q=0.5,en;q=0.3',
    'Cache-Control': 'max-age=0',
    'Connection': 'keep-alive',
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'
}

# 去停用词,方便提取关键词
def remove_stop_word(word_list):
    stopWord = open("./stop_words_ch.txt", 'r', encoding='GBK').read().strip()
    stopWordList = stopWord.splitlines()
    stopWordList.append("天前")
    stopWordList.append("来源")
    stopWordList.append("位于")
    stopWordList.append("当年")
    stopWordList.append("为此")
    stopWordList.append("pdf")
    stopWordList.append("https")
    stopWordList.append("http")
    return list(set(word_list) - set(stopWordList))

# 解析网页提取有效信息
def geturl(num_pages,word):
    result = []
    for i in range(num_pages):
        print("==>Parsing page {},total page {}.".format(i,num_pages))
        number = i * 10
        path = "http://www.baidu.com/s?wd={}&pn={}".format(urllib.parse.quote(word),number)
        content = requests.get(path, headers=headers)
        soup = BeautifulSoup(content.text, 'html.parser')
        tagh3 = soup.find_all('div',class_='result c-container new-pmd')
        for h3 in tagh3:
            msg_dict = {"title": "", "abstract": "", "url": "", "time": "", "key_word": "", "class": ""}
            try:
                title = h3.find(name="h3", attrs={"class": re.compile("t")}).find('a').text.replace("\"", "")
                abstract = h3.find(name="div", attrs={"class": re.compile("c-abstract")}).text.replace("\"", "")
                url = h3.find(name="a", attrs={"class": re.compile("c-showurl")}).get('href')
            except:
                continue
            try:
                time = h3.find(name="div", attrs={"class": re.compile("c-abstract")}).find(name='span').text
            except:
                time = ""
            try:
                source = h3.find(name="div",class_="f13 c-gap-top-xsmall se_st_footer user-avatar").find(name='a').text
            except:
                source = None
            msg_dict["title"] = title
            msg_dict["abstract"] = abstract
            msg_dict["url"] = url
            msg_dict["time"] = time

            if "www" in source:
                msg_dict["class"] = "网站"
            elif "网" in source:
                msg_dict["class"] = "新闻"
            elif "百度" in source:
                msg_dict["class"] = "百度文库"
            else:
                msg_dict["class"] = "其他"

            seg_word = jieba.cut(abstract)
            seg_word = remove_stop_word(seg_word)
            collection_words = Counter(seg_word)
            try:
                for most in collection_words.most_common(3):
                    k = most[0]
                    if len(k) == 1:
                        continue
                    if k[0] in ["1","2","3","4","5","6","7","8","9","0"]:
                        continue
                    msg_dict["key_word"] = k
                    break
            except:
                msg_dict["key_word"] = ""

            result.append(msg_dict)
    return result



if __name__ == '__main__':

    f = open('result.csv', 'w', encoding='utf-8')
    csv_writer = csv.writer(f)
    csv_writer.writerow(["序号","标题", "摘要", "网址", "时间", "关键词", "类别"])

    res = geturl(num_pages=30,word="国庆节")
    print("==>Start write result to CSV file...")
    for index,r in enumerate(res):
        csv_writer.writerow([str(index+1),r['title'],r['abstract'],r["url"],r["time"],r["key_word"],r["class"]])
    f.close()
    print("==>Finish! Total msg number is {}".format(len(res)))


  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:14:15  更:2021-10-09 16:16:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:54:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码