python 爬虫怎么过滤正文以外的

Python019

python 爬虫怎么过滤正文以外的,第1张

利用bs4查找所有的div,用正则筛选出每个div里面的中文,找到中文字数最多的div就是属于正文的div了。定义一个抓取的头部抓取网页内容:

import requests

headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36',

    'Host': 'blog.csdn.net'}

session = requests.session()

def getHtmlByRequests(url):

    headers.update(

        dict(Referer=url, Accept="*/*", Connection="keep-alive"))

    htmlContent = session.get(url=url, headers=headers).content

    return htmlContent.decode("utf-8", "ignore")

统计文字的正则:

import re

# 统计中文字数

def countContent(string):

    pattern = re.compile(u'[\u1100-\uFFFD]+?')

    content = pattern.findall(string)

    return content

查找每一个div,统计每一个div的文字,只保留文字最多的那个div:

# 分析页面信息

def analyzeHtml(html):

    # 初始化网页

    soup = BeautifulSoup(html, "html.parser")

    part = soup.select('div')

    match = ""

    for paragraph in part:

        content = countContent(str(paragraph))

        if len(content) > len(match):

            match = str(paragraph)

    return match

最后的调用几个函数即可:

def main():

    url = "http://blog.csdn.net/"

    html = getHtmlByRequests(url)

    mainContent = analyzeHtml(html)

    soup = BeautifulSoup(mainContent, "html.parser")

    print(soup.select('div')[0].text)

单章的部分应该没问题,去目录页爬下章节链接存列表里遍历爬取就行了吧。

另外通常手机版站点的反爬会弱一些,有没有考虑爬手机站?

github、csdn、博客园等等站会有相关的博文涉及相关爬虫和源码,去参考一下也好。

还解决不了的话先把“全部正文,不知道咋回事目录都爬不下来”的情况说的更详细一点。