Python:使用 BeautifulSoup 库抓取百度天气

最近研究了Python的BeautifulSoup库,用起来还挺好玩的
一、安装:使用pip命令在线安装;在cmd窗口中输入:pip install beautilfulsoup4

二、代码思路:
1.使用request获取相关网页的返回值,即HTML对象; 方法一
2.通过BeautifulSoup库对HTML页面元素进行解析,需要先分析要抓取的内容在哪里,再通过代码获取,存储在列表中;方法二
3.读取列表中内容,写入到csv文件中。方法三

```python
from bs4 import BeautifulSoup
import requests
import csv
import xlwt

def GetContent(url):
res=requests.get(url)
# print(res.encoding) # 查看res编码,如果不是utf-8,要在这里修改编码
res.encoding=‘utf-8‘
return res.text

#将页面对象传入,通过beautifulSoup解析,获取对应的标签值,然后写入的excel中。
def GetWeath(html):
final_data=[]
soup=BeautifulSoup(html,"html.parser") # 创建 BeautifulSoup对象
# 1)查看源代码,找到最贴近需要爬取信息的外层的一个唯一标签; 2)然后使用findall找到对应每天的标签
data=soup.find(‘ul‘,{"class":"t clearfix"})
li=data.find_all("li")

#遍历li标签,每一个li标签对应一天的天气状况
for day in li:
item=[]
date=day.find("h1").string#zz找到日期,对应哪一天
item.append(date)

info=day.find_all("p") #找到天气状况,并追加
item.append(info[0].string)

#判断最高温度是否为空,为空则不写入,否则写入;追加最高和最低温度;
if info[1].find("span") is None:
temperature_highest=None
else:
temperature_highest=info[1].find("span").string
temperature_lowest = info[1].find(‘i‘).string
item.append(temperature_highest)
item.append(temperature_lowest)

#追加每次的数据
final_data.append(item)
# print(final_data)
return final_data

# 将结果写入到csv文件中;注意编码格式;
def WriteCsv(title,data,filename):
‘‘‘
:param title: 第一行:标题;仅写入一次即可;
:param data: 要写入的数据,列表形式,有多行多列;
:param filename: 文件名;
:return:
‘‘‘
with open(filename,‘w‘,newline=‘‘,encoding=‘utf_8_sig‘)as file:
file_csv=csv.writer(file)
file_csv.writerow(title)
file_csv.writerows(data)

if __name__ == ‘__main__‘:
url = ‘http://www.weather.com.cn/weather/101120101.shtml‘
title=[‘日期‘,‘天气情况‘,‘最高气温‘,‘最低气温‘] #csv文件的标题栏
html=GetContent(url)
data=GetWeath(html)
WriteCsv(title,data,"result_weath.csv")

```
效果图:

原文地址:https://www.cnblogs.com/test123/p/11382040.html

时间: 2024-11-09 03:15:33

Python:使用 BeautifulSoup 库抓取百度天气的相关文章

关于python的requests库抓取源文件中文乱码的情况

1 import requests 2 3 html=requests.get('http://www.12306.cn/mormhweb/') 4 5 print html.text 刚开始是这么写的,运行时一直弹出错误 之后加上了 html.encoding='utf-8' 完美解决

爬虫抓取百度贴吧帖子内容

上篇文章已经介绍了抓取糗事百科的段子,这篇文章来抓取百度贴吧帖子内容,涉及到urllib,urllib2,re等模块. 代码实现功能: 1.获取某一个帖子的标题 2.获取帖子回复的所有页数,以及每一页的内容 3.可以只获取楼主的回复(使用数字1声明),或者所有回复(使用数字0声明) 直接使用oop编程的方式编写代码: 代码如下: #!/usr/bin/env python #coding:utf8 import urllib import urllib2 import re #处理页面标签类 c

python爬虫CSDN文章抓取

CSDN原则上不让非人浏览访问,正常爬虫无法从这里爬取文章,需要进行模拟人为浏览器访问. 使用:输入带文章的CSDN链接自动生成正文的HTML,文件名为标题名 #!/usr/bin/env python # coding=utf-8 ######################################### #> File Name: CSDN_article.py #> Author: nealgavin #> Mail: [email protected] #> Cre

python&php数据抓取、爬虫分析与中介,有网址案例

近期在做一个网络爬虫程序.后台使用python不定时去抓取数据.前台使用php进行展示 站点是:http://se.dianfenxiang.com

Python3抓取百度贴吧图片

我抓取的地址是http://tieba.baidu.com/p/3125473879?pn=2,这个帖子共有82页左右,下面的代码主要抓取82页的所有图片,具体代码如下: """抓取百度贴吧图片""" #导入模块 import re import urllib from urllib.request import urlopen,urlretrieve #获取抓取页面的源代码 def getHtml(url):     page = urlope

php抓取百度快照、百度收录、百度热词程序代码

<?/*抓取百度收录代码*/function baidu($s){ $baidu="http://www.baidu.com/s?wd=site%3A".$s; $site=file_get_contents($baidu); //$site=iconv("gb2312", "UTF-8", $site); ereg("找到相关网页(.*)篇,", $site,$count); $count=str_replace(&q

用PHP抓取百度贴吧邮箱数据

注:本程序可能非常适合那些做百度贴吧营销的朋友. 去逛百度贴吧的时候,经常会看到楼主分享一些资源,要求留下邮箱,楼主才给发. 对于一个热门的帖子,留下的邮箱数量是非常多的,楼主需要一个一个的去复制那些回复的邮箱,然后再粘贴发送邮件,不是被折磨死就是被累死.无聊至极写了一个抓取百度贴吧邮箱数据的程序,需要的拿走. 程序实现了一键抓取帖子全部邮箱和分页抓取邮箱两个功能,界面懒得做了,效果如下: 老规矩,直接贴源码 <?php $url2=""; $page="";

C#.Net使用正则表达式抓取百度百家文章列表

工作之余,学习了一下正则表达式,鉴于实践是检验真理的唯一标准,于是便写了一个利用正则表达式抓取百度百家文章的例子,具体过程请看下面源码: 一:获取百度百家网页内容 1 public List<string[]> GetUrl() 2 { 3 try 4 { 5 string url = "http://baijia.baidu.com/"; 6 WebRequest webRequest = WebRequest.Create(url); 7 WebResponse web

python抓取百度彩票的双色球数据

最近在学习<机器学习实战>这本书,在学习的过程中不免要自己去实践,写些练习.这写练习的第一步就需要收集数据,所以为了写好自己的练习程序,我得先学会收集一些网络数据.了解到用python抓取网页数据的一些方法后,我就根据别人的demo,自己实践了一下,学着从百度彩票网站上抓取双色球的历史数据.以下我就介绍一下自己的小程序. 大致思路如下 找到相关url和其参数 找出页面上你要抓取的数据的位置,也就是说这个数据在那些标签下 将每页中学要的数据取下来按一定格式存放在自己本地 需要的环境: pytho