python 爬取<a>标签内href的方法及遇到的问题

博客记录了在Python爬虫中使用特定方法读取网页链接时编译器报错的情况,通过修改代码成功运行并取出href中的链接,还给出了原博客及转载博客的地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原博客地址:

https://www.cnblogs.com/dengyg200891/p/6060010.html

 1 # -*- coding:utf-8 -*-
 2 #python 2.7
 3 #XiaoDeng
 4 #http://tieba.baidu.com/p/2460150866
 5 #标签操作
 6 
 7 
 8 from bs4 import BeautifulSoup
 9 import urllib.request
10 import re
11 
12 
13 #如果是网址,可以用这个办法来读取网页
14 #html_doc = "http://tieba.baidu.com/p/2460150866"
15 #req = urllib.request.Request(html_doc)  
16 #webpage = urllib.request.urlopen(req)  
17 #html = webpage.read()
18 
19 
20 
21 html="""
22 <html><head><title>The Dormouse's story</title></head>
23 <body>
24 <p class="title" name="dromouse"><b>The Dormouse's story</b></p>
25 <p class="story">Once upon a time there were three little sisters; and their names were
26 <a href="http://example.com/elsie" class="sister" id="xiaodeng"><!-- Elsie --></a>,
27 <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
28 <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
29 <a href="http://example.com/lacie" class="sister" id="xiaodeng">Lacie</a>
30 and they lived at the bottom of a well.</p>
31 <p class="story">...</p>
32 """
33 soup = BeautifulSoup(html, 'html.parser')   #文档对象
34 
35 
36 #查找a标签,只会查找出一个a标签
37 #print(soup.a)#<a class="sister" href="http://example.com/elsie" id="xiaodeng"><!-- Elsie --></a>
38 
39 for k in soup.find_all('a'):
40     print(k)
41     print(k['class'])#查a标签的class属性
42     print(k['id'])#查a标签的id值
43     print(k['href'])#查a标签的href值
44     print(k.string)#查a标签的string
45     #tag.get('calss'),也可以达到这个效果

 

在使用该方法的k['href']读取网页链接时,编译器报错:

 KeyError: 'href'

修改为:

 k.get('href')

成功运行,取出href中的链接。



 



 

转载于:https://www.cnblogs.com/zhouya1/p/10821779.html

<div class="conMidtab2"> <a name="2" id="2"></a> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody><tr style="background-color: rgb(255, 255, 255);"> <td width="74" rowspan="2">省/直辖市</td> <td width="83" rowspan="2">城市</td> <td height="37" colspan="3">周一(5月12日)白天</td> <td colspan="3">周一(5月12日)夜间</td> <td width="49" rowspan="2" class="last"> </td> </tr> <tr style="background-color: rgb(243, 243, 245);"> <td width="89" height="23">天气现象</td> <td width="162">风向风力</td> <td width="92" class="" style="">最高气温</td> <td width="98" class="" style="">天气现象</td> <td width="177" class="" style="">风向风力</td> <td width="86" class="" style="">最低气温</td> </tr> <tr style="background-color: rgb(255, 255, 255);" class=""> <td width="74" rowspan="18" class="rowsPan"> <a href="/textFC/henan.shtml" target="_blank">河南</a> </td> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101180101.shtml" target="_blank">郑州</a></td> <td width="89" class="" style="">多云</td> <td width="162" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">35</td> <td width="98" class="" style="">多云</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="86" class="" style="">22</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101180101.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(243, 243, 245);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101180201.shtml" target="_blank">安阳</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>南风</span> <span class="conMidtabright"><3级</span></td> <td width="92" class="" style="">34</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>西南风</span> <span class="conMidtabright"><3级</span></td> <td width="86" class="" style="">21</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101180201.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(255, 255, 255);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101180301.shtml" target="_blank">新乡</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">35</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="86" class="" style="">21</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101180301.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(243, 243, 245);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101180401.shtml" target="_blank">许昌</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>西南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">33</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="86" class="" style="">18</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101180401.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(255, 255, 255);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101180501.shtml" target="_blank">平顶山</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>西南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">32</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>西南风</span> <span class="conMidtabright"><3级</span></td> <td width="86" class="" style="">20</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101180501.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(243, 243, 245);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101180601.shtml" target="_blank">信阳</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">31</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="86" class="" style="">21</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101180601.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(255, 255, 255);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101180701.shtml" target="_blank">南阳</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>南风</span> <span class="conMidtabright"><3级</span></td> <td width="92" class="" style="">31</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright"><3级</span></td> <td width="86" class="" style="">18</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101180701.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(243, 243, 245);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101180801.shtml" target="_blank">开封</a></td> <td width="89">多云</td> <td width="162" class="" style=""> <span>西南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">34</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="86" class="" style="">21</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101180801.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(255, 255, 255);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101180901.shtml" target="_blank">洛阳</a></td> <td width="89">晴</td> <td width="162" class="" style=""> <span>西南风</span> <span class="conMidtabright"><3级</span></td> <td width="92" class="" style="">35</td> <td width="98" class="" style="">晴</td> <td width="177" class="" style=""> <span>西南风</span> <span class="conMidtabright"><3级</span></td> <td width="86" class="" style="">20</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101180901.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(243, 243, 245);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101181001.shtml" target="_blank">商丘</a></td> <td width="89">多云</td> <td width="162" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">31</td> <td width="98" class="" style="">多云</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="86" class="" style="">18</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101181001.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(255, 255, 255);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101181101.shtml" target="_blank">焦作</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>西南风</span> <span class="conMidtabright"><3级</span></td> <td width="92" class="" style="">36</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>西风</span> <span class="conMidtabright"><3级</span></td> <td width="86" class="" style="">23</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101181101.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(243, 243, 245);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101181201.shtml" target="_blank">鹤壁</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>西南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">33</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="86" class="" style="">21</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101181201.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(255, 255, 255);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101181301.shtml" target="_blank">濮阳</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">33</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="86" class="" style="">22</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101181301.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(243, 243, 245);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101181401.shtml" target="_blank">周口</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">34</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="86" class="" style="">21</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101181401.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(255, 255, 255);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101181501.shtml" target="_blank">漯河</a></td> <td width="89">多云</td> <td width="162" class="" style=""> <span>西南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">33</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright"><3级</span></td> <td width="86" class="" style="">19</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101181501.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(243, 243, 245);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101181601.shtml" target="_blank">驻马店</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>南风</span> <span class="conMidtabright">3-4级</span></td> <td width="92" class="" style="">32</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright"><3级</span></td> <td width="86" class="" style="">18</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101181601.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(255, 255, 255);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101181701.shtml" target="_blank">三门峡</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>西风</span> <span class="conMidtabright"><3级</span></td> <td width="92" class="" style="">31</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>南风</span> <span class="conMidtabright"><3级</span></td> <td width="86" class="" style="">18</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101181701.shtml" target="_blank">详情</a></td> </tr> <tr style="background-color: rgb(243, 243, 245);" class=""> <td width="83" height="23"> <a href="http://www.weather.com.cn/weather/101181801.shtml" target="_blank">济源</a></td> <td width="89">阴</td> <td width="162" class="" style=""> <span>西南风</span> <span class="conMidtabright"><3级</span></td> <td width="92" class="" style="">34</td> <td width="98" class="" style="">阴</td> <td width="177" class="" style=""> <span>西北风</span> <span class="conMidtabright"><3级</span></td> <td width="86" class="" style="">19</td> <td width="49" class="last" style=""> <a href="http://www.weather.com.cn/weather/101181801.shtml" target="_blank">详情</a></td> </tr> </tbody></table> <div class="contentLtab"> <span style="margin-left:400px;"> <a href="#">返回顶部</a></span> </div> </div> 我要爬取的数据HTML格式是这样的,我应该如何爬取
最新发布
05-13
<think>嗯,用户给了一个HTML表格,想要爬取里面的数据。首先,我需要分析这个HTML结构,看看数据是怎么组织的。看起来这是一个天气数据的表格,包含河南省多个城市的白天和夜间天气信息。 首先,观察表格结构。表格的tbody里有多个tr标签,每个tr代表一行数据。省/直辖市这一列用了rowspan,所以每个城市都属于河南。每个城市行里包含城市名称、白天的天气现象、风向风力、最高气温,夜间的天气现象、风向风力、最低气温,以及详情链接。 接下来,我需要用Python的库来解析HTML。常用的有BeautifulSoup和lxml。这里选择BeautifulSoup,因为比较方便。然后,我需要找到表格,可能通过查找table标签或者特定的class,比如这里的conMidtab2。 然后,遍历每个tr标签。需要注意的是,前两个tr是表头,可能需要跳过。从第三个tr开始才是数据行。每个数据行的td标签里包含了需要的信息。例如,第一个td是省名,但因为有rowspan,可能只需要提取一次,后面的行可能没有这个td。不过看起来用户提供的HTML中,河南的省名在第一个td,rowspan为18,覆盖了下面的所有城市行。所以在解析的时候,可能需要处理这种情况,但可能在实际处理中,每个城市行的第一个td都是存在的?需要检查HTML结构。 或者,可能每个省份的第一个tr的td有rowspan,而后续的tr可能没有省名的td。这时候需要记录当前的省份,直到遇到新的省份。例如,在用户提供的例子中,河南的rowspan是18,所以接下来的17个tr都属于河南,不需要重复提取省名。 但是,在用户提供的HTML中,每个城市行的第一个td都是存在的,可能因为rowspan被展开成了多个td?或者可能用户提供的HTML结构有误。需要仔细检查HTML结构。 看用户提供的HTML,第一个tr是表头,第二个tr是子表头,然后接下来的tr是数据行。每个数据行的第一个td是省名,rowspan为18,但实际上每个城市行的第一个td都是省名,这可能是因为在浏览器中渲染时,rowspan会自动展开,但在实际的HTML中,只有第一个tr有省名的td,后续的tr可能没有。但根据用户提供的HTML代码,每个tr的第一个td都是存在的,这可能是因为示例代码中的HTML可能被简化了,或者用户复制时包含了所有展开的td。 例如,在用户提供的代码中,第一个数据行的tr结构是: <tr> <tdrowspan="18">河南</td> <td>郑州</td> ...</tr> 接下来的第二个数据行的tr结构是: <tr> <td>安阳</td>... </tr>但根据HTML标准,rowspan="18"意味着该td会占据18行,所以后续的17个tr在同一个tbody中,不会再有该td。因此,在解析时,第一个tr有省名的td,而后续的17个tr的第一个td应该是城市名,而不是省名。但用户提供的HTML中,每个tr的第一个td都是省名,这可能与实际不符,可能是用户复制时的问题,或者示例代码有误。 这里可能需要用户确认,但根据提供的HTML代码,每个数据行的第一个td都是省名,所以可能需要处理这种情况。 或者,用户可能提供的HTML中,每个城市行都重复了省名,这可能是因为在复制时浏览器自动展开rowspan,导致每个tr都包含了省名的td。这种情况下,解析就比较简单,直接遍历每个tr,提取省名、城市名等信息。 假设每个tr中的第一个td是省名,第二个td是城市名,接下来是白天的天气现象、风向风力、最高气温,然后是夜间的天气现象、风向风力、最低气温,以及详情链接的td。 所以,对于每个tr,结构可能是: td[0]: 省名 td[1]: 城市名 td[2]: 白天天气现象 td[3]:白天风向风力td[4]:白天最高气温td[5]: 夜间天气现象 td[6]: 夜间风向风力 td[7]:夜间最低气温td[8]:详情链接但需要验证。例如,在用户提供的HTML中,第一个数据行的td结构是: <tdrowspan="18" class="rowsPan"><a href>河南</a></td> <td><a>郑州</a></td> <td>多云</td> <td><span>南风</span><span>3-4级</span></td> <td>35</td> <td>多云</td> <td><span>南风</span><span>3-4级</span></td> <td>22</td> <td><a>详情</a></td> 所以,td的数量是9个。其中,第一个td是省名,第二个是城市名,接下来是白天的三个数据,然后是夜间的三个数据,最后是详情。 因此,可以遍历每个tr,跳过表头行,提取每个td的内容。 具体步骤: 1.使用requests库获取网页内容。 2. 使用BeautifulSoup解析HTML。3. 找到表格,可能通过class="conMidtab2"的div下的table。4. 遍历表格中的每个tr,跳过前两行(表头)。 5.对于每个tr,提取所有td。6. 对于每个td,提取对应的文本或链接。 需要注意的是,风向风力可能包含多个span,需要合并。例如,风向和风力在两个span中,需要拼接起来。 代码的大致思路: -找到所有tr,然后过滤掉表头。 -对于每个数据行tr:- 省名:td[0].text.strip()- 城市名:td[1].text.strip() -白天天气:td[2].text.strip() -白天风向风力:提取td[3]中的span内容,合并。- 白天最高气温:td[4].text.strip() -夜间天气:td[5].text.strip()- 夜间风向风力:提取td[6]中的span内容,合并。 -夜间最低气温:td[7].text.strip()- 详情链接:td[8].a的href属性。 但是需要处理可能存在的缺失数据,例如某些td可能没有内容,或者结构不同。 另外,风向风力所在的td可能有多个span,需要将它们的文本用空格连接。 例如,对于风向风力: <td><span>南风</span><span class="conMidtabright">3-4级</span></td> 应该提取为“南风 3-4级”。 所以,在处理风向风力时,需要提取所有span的文本,并用空格连接。 此外,气温可能包含特殊字符或空格,需要清理。 编写代码时需要注意这些细节。 现在,编写示例代码: 使用BeautifulSoup和requests,遍历每个tr,提取数据。可能需要处理省名的rowspan,但根据用户提供的HTML,每个tr都有省名的td,所以可能不需要处理rowspan的问题。但实际情况中,可能只有第一个tr有省名的td,后续的tr可能没有,所以需要处理这种情况。但根据用户提供的例子,每个tr都有省名的td,所以可以按上述方法处理。示例代码: ```python import requestsfrom bs4import BeautifulSoupurl = 'http://example.com/weather' #替换为实际URL response =requests.get(url)response.encoding ='utf-8' #根据实际编码调整soup =BeautifulSoup(response.text, 'html.parser') #找到表格,根据提供的HTML结构,表格在class="conMidtab2"的div下的table table =soup.find('div', class_='conMidtab2').find('table') data = []for row in table.find_all('tr')[2:]:# 跳过前两行表头 tds = row.find_all('td')if len(tds) <9: #确保有足够的td continue#提取省名province = tds[0].get_text(strip=True) #城市名city = tds[1].get_text(strip=True) #白天天气day_weather= tds[2].get_text(strip=True)# 白天风向风力,合并span内容day_wind =' '.join([span.get_text(strip=True) forspan in tds[3].find_all('span')]) day_temp= tds[4].get_text(strip=True)# 夜间天气 night_weather = tds[5].get_text(strip=True) night_wind = ''.join([span.get_text(strip=True) for spanin tds[6].find_all('span')])night_temp =tds[7].get_text(strip=True)# 详情链接detail_link= tds[8].find('a')['href'] if tds[8].find('a') else'' data.append({ '省份': province,'城市':city, '白天天气': day_weather,'白天风向风力': day_wind, '白天最高气温': day_temp, '夜间天气': night_weather,'夜间风向风力': night_wind, '夜间最低气温': night_temp, '详情链接': detail_link })# 打印数据for item indata: print(item) ``` 这段代码首先获取网页内容,解析表格,然后遍历每个数据行,提取所需字段。处理了风向风力中的多个span,将它们合并为一个字符串。同时提取了详情链接的href属性。 需要注意的是,实际URL需要替换成目标网址,并且可能需要处理反爬机制,如设置headers等。此外,如果省名只在第一个tr中出现,后续的tr可能没有省名的td,这时需要记录当前的省名,直到遇到新的省名。但在用户提供的HTML中,每个tr都有省名的td,所以代码中直接提取即可。 相关问题可能涉及处理rowspan的情况、使用其他库如lxml、处理分页或动态加载的内容,或者数据存储等。</think>以下是使用Python爬取该HTML表格数据的解决方案: ```python import requests from bs4 import BeautifulSoup def crawl_weather_data(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) soup = BeautifulSoup(response.content, 'html.parser') weather_data = [] # 定位到天气数据表格 table = soup.find('div', class_='conMidtab2').find('table') # 遍历所有行(跳过前两行表头) for row in table.find_all('tr')[2:]: cols = row.find_all('td') if len(cols) >= 9: # 处理风向数据中的多个span day_wind = ' '.join([span.get_text(strip=True) for span in cols[3].find_all('span')]) night_wind = ' '.join([span.get_text(strip=True) for span in cols[6].find_all('span')]) weather_data.append({ '省份': cols[0].get_text(strip=True), '城市': cols[1].get_text(strip=True), '白天天气': cols[2].get_text(strip=True), '白天风力': day_wind, '最高气温': cols[4].get_text(strip=True), '夜间天气': cols[5].get_text(strip=True), '夜间风力': night_wind, '最低气温': cols[7].get_text(strip=True), '详情链接': cols[8].find('a')['href'] if cols[8].find('a') else '' }) return weather_data # 使用示例 if __name__ == "__main__": target_url = "http://www.weather.com.cn/textFC/henan.shtml" data = crawl_weather_data(target_url) for item in data[:3]: # 打印前3条结果示例 print(item) ``` 代码解释: 1. 使用requests库发送HTTP请求,添加User-Agent头模拟浏览器访问 2. 使用BeautifulSoup解析HTML文档,通过class定位到目标表格 3. 遍历表格行时跳过前两行表头(索引2开始) 4. 对每个数据行提取9列数据,特别处理包含多个span的风力信息 5. 将提取的数据组织为字典格式并存入列表 6. 最终返回结构化的天气数据列表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值