[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

我换parsel库解决了这个问题

TOP

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

回复 5# netdzb


    我最后一篇不知道为什么没有写入,另外乱码不知道怎么解决,有好几种编码
你看看这两个问题能否解决
  1. import requests
  2. import parsel
  3. # ●爬取网页代码框架
  4. def getHTMLText(url):
  5.     try:
  6.         r = requests.get(url, timeout=30)
  7.         r.raise_for_status()
  8.         r.encoding = r.apparent_encoding
  9.         return r.text
  10.     except:
  11.         return "产生异常"
  12. # ●目标网址
  13. url = 'https://www.dzwzzz.com/jingxuan'
  14. # 网页选择器
  15. def get_link_title(url):
  16.     html = getHTMLText(url)
  17.     infoDict = {}
  18.     sel = parsel.Selector(html)
  19.     # 获取所有链接
  20.     links = sel.css('.blkContainerSblkCon a::attr(href)').getall()
  21.     # 获取所有标题
  22.     titles = sel.css('.blkContainerSblkCon a::text').getall()
  23.     for i in range(len(links)):
  24.         key = links[i]
  25.         val = titles[i]
  26.         key = 'https://www.dzwzzz.com' + key[key.index('..') + 2:key.index('html')] + 'html'
  27.         infoDict[key] = val
  28.     return infoDict
  29. def get_chapter_text(url):
  30.     content = getHTMLText(url)
  31.     strs = ""
  32.     sel = parsel.Selector(content)
  33.     try:
  34.         lines = sel.css('.blkContainerSblkCon p::text').getall()
  35.         for i in range(len(lines)):
  36.             strs += lines + '\n'
  37.         lines = sel.css('.mt20.f14 p::text').getall()
  38.         for i in range(len(lines)):
  39.             strs += lines + '\n'
  40.         lines = sel.css('.mt20.f12 p::text').getall()
  41.         for i in range(len(lines)):
  42.             strs += lines + '\n'
  43.     except:
  44.         print('获取不到div标签')
  45.         pass
  46.     return strs
  47. length = len(get_link_title(url))
  48. count = 0
  49. for key, val in get_link_title(url).items():
  50.     count += 1
  51.     print('正在打印第%d篇' % count, '总共有%d篇' % length)
  52.     url, title = key, val
  53.     with open('读者文摘.txt', 'a', encoding='utf-8') as f:
  54.         f.write('##' + title + '\n' + get_chapter_text(url) + '\n')
复制代码

TOP

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

TOP

回复 9# netdzb


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

TOP

回复 11# netdzb


    是的

TOP

返回列表