python爬虫中Soup.find('table')搜索不出内容

新手求教,我想要获取这个table中的内容,
爬取网站

图片没能上传上来,就是从这里开始的那个表格:

<table class="list-invecase">
                    <tbody>
                    <tr>
                        <td class="date">
                            <span class="verdana">2018-05-12</span>
         
       

我是这样写的:

import urllib.request
import requests 
import re 
from bs4 import BeautifulSoup
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0"} 
page_html = requests.get('https://www.itjuzi.com/investfirm/1', headers=headers)
Soup = BeautifulSoup(page_html.text, 'lxml')
art_list = Soup.find('table')
art_list 

但是得到的内容却是:

<table class="list-invecase">
<tbody></tbody>
</table>

请问应该如何获得我想要的日期,名称、行业等,我刚接触这个,很多不懂,请大家指导,谢谢咯

阅读 10.1k
1 个回答

首先,爬这类网站你得看网页的源码,而不仅仅是右键检查。因为request.get获取的是网页的源码,而不是浏览器修饰后你看到的html。
通过网页源码可以看到
clipboard.png
你获取的就是这玩意。甚至你可以soup.findAll('table'),能解析到的‘table’也只有这玩意。
本身可以跳过talbe标签,可以通过 class="verdana"的span标签、class="date"的td标签找得更细,但源码看
clipboard.png
你所需要的东西是js渲染上去的,不是本身html代码里就有的。
所以你需要的东西在这里:https://www.itjuzi.com/invest...

clipboard.png

去request.get这个url,再解析(可能需要用到json这个包),才能获得你想要的东西

其次,.find(‘table’)是遍历所有talbe标签后返回第一个<table>标签,在你不确定有多少<table>标签的情况下,你这样写也只返回第一个。所以可以用.findAll看看有多少table标签,确定第几个,或者像上面提到,给它加限定条件,比如Soup.find('table',class_='list-invecase'),或是Soup.find('span',class_='verdana')这样,更有利于你的寻找。

最后,建议官方文档,https://www.crummy.com/softwa...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题