返回列表 发帖

[问题求助] [已解决]Python用bs4爬取网页代码,找不到DIV标签

本帖最后由 wxyz0001 于 2021-5-23 16:35 编辑
用 soup.find('div', class_='blkContainerSblkCon')可以找到DIV标签
for line in soup.find('div', class_='blkContainerSblkCon').find_all(name='p'):
但是class里有空格 soup.find('div', class_='left conten')又找不到
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
网上说class里有空格,可以用.代替空格就可以找到,但是不行
用soup.find('div.blkContainerSblkCon')找不到
用soup.find('div.left.conten')找不到
为什么找不到呢,难道我的是个假BeautifulSoup库COPY

我换parsel库解决了这个问题

TOP

本帖最后由 wxyz0001 于 2021-5-24 10:00 编辑

回复 5# netdzb


    我最后一篇不知道为什么没有写入,另外乱码不知道怎么解决,有好几种编码
你看看这两个问题能否解决
import requests
import parsel
# ●爬取网页代码框架
def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常"
# ●目标网址
url = 'https://www.dzwzzz.com/jingxuan'
# 网页选择器
def get_link_title(url):
    html = getHTMLText(url)
    infoDict = {}
    sel = parsel.Selector(html)
    # 获取所有链接
    links = sel.css('.blkContainerSblkCon a::attr(href)').getall()
    # 获取所有标题
    titles = sel.css('.blkContainerSblkCon a::text').getall()
    for i in range(len(links)):
        key = links[i]
        val = titles[i]
        key = 'https://www.dzwzzz.com' + key[key.index('..') + 2:key.index('html')] + 'html'
        infoDict[key] = val
    return infoDict
def get_chapter_text(url):
    content = getHTMLText(url)
    strs = ""
    sel = parsel.Selector(content)
    try:
        lines = sel.css('.blkContainerSblkCon p::text').getall()
        for i in range(len(lines)):
            strs += lines + '\n'
        lines = sel.css('.mt20.f14 p::text').getall()
        for i in range(len(lines)):
            strs += lines + '\n'
        lines = sel.css('.mt20.f12 p::text').getall()
        for i in range(len(lines)):
            strs += lines + '\n'
    except:
        print('获取不到div标签')
        pass
    return strs
length = len(get_link_title(url))
count = 0
for key, val in get_link_title(url).items():
    count += 1
    print('正在打印第%d篇' % count, '总共有%d篇' % length)
    url, title = key, val
    with open('读者文摘.txt', 'a', encoding='utf-8') as f:
        f.write('##' + title + '\n' + get_chapter_text(url) + '\n')COPY

TOP

我知道为什么最后一篇没有写入了,刚查看了一下,有好几篇都没有写入。原因是文本用的是div标签,不是用的p标签,这个可以用判断来解决。
但是网页乱码不好解决,这么多网页有好几种编码。

TOP

回复 9# netdzb


    css的class里有空格用bs4读不出,另外,p标签怎么会只有一个?

TOP

回复 11# netdzb


    是的

TOP

返回列表