Pyhton网页爬虫抓取学习(一) BeautifulSoup的使用

风流意气都作罢 提交于 2020-01-28 07:36:49
<table id="table" width="100%" border="0" align="center" cellpadding="0" cellspacing="0" class="from_w">
<tbody><tr>
<td width="20%" align="right" class="tdlable">1</td>
<td width="30%" align="left" class="tdvalue">2</td>
<td width="20%" align="right" class="tdlable">1<font color="#FF0000">*</font> </td>
<td width="30%" align="left" class="tdvalue">2&nbsp;</td>
</tr>
<tr class="evenRow">
<td align="right" class="tdlable">2<font color="#FF0000">*</font> </td>
<td class="tdvalue"></td>
<td align="right" class="tdlable">1<font color="#FF0000">*</font> </td>
<td class="tdvalue">1</td>
</tr>
<tr>
<td align="right" class="tdlable">1<font color="#FF0000">*</font> </td>
<td align="left" class="tdvalue">2<input type="button" value="&nbsp;" name="&nbsp;" class="btn_50" disabled="disabled" style="display: none;"> 
</td>
<td align="right" class="tdlable">1<font color="#FF0000">*</font> </td>
<td align="left" class="tdvalue">2</td>
</tr>
<tr class="evenRow">
<td align="right" class="tdlable">1</td>
<td colspan="3" align="left" class="tdvalue">&nbsp;</td>
</tr>
<tr>
<td align="right" class="tdlable">1</td>
<td colspan="3" align="left" class="tdvalue">2</td>
</tr>
<tr>
<td colspan="4" align="right" class="bartop">登记</td>
</tr>
<tr>
<td align="right" class="tdlable">登记日期&nbsp;</td>
<td align="left" class="tdvalue">20191230</td>
<td align="right" class="tdlable">更新日期&nbsp;</td>
<td align="left" class="tdvalue">20191230</td>
</tr>
</tbody></table>
from bs4 import BeautifulSoup
import requests


url='index.html'
html=requests.get(url)
html.encoding='gbk'
soup=BeautifulSoup(html.text,'lxml')

text=soup.select("#table>tbody>tr:nth-of-type(7)>td:nth-of-type(2)")
print(text[0].get_text())

第一段代码为需要抓取的html文本 ,我把他命名为Index.html

为防止抓取过程的中文乱码,在Python代码中添加了 html.encoding='gbk',

本次使用了BeautifulSoup 类库中的 lxml 选择器

soup 选择器 select使用了 css 选择器 #table>tbody>tr:nth-of-type(7)>td:nth-of-type(2) 这一行的意思是 id为table下的 tbody下的第7个tr里面的第二个td


text=soup.select("#table>tbody>tr:nth-of-type(7)>td:nth-of-type(2)")

输出的结果是  <td align="left" class="tdvalue">20191230</td>

 

为了直接得到 20191230 需要使用 text[0].get_text() 注意直接使用 text.get_text() 会报错 可能是版本的问题

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!