赞
踩
这次的爬虫主要目的就是爬取当日中国天气网的即时气候数据。我位于苏州所以爬取的是苏州7月19号的天气。
首先,使用的是beautifulsoup和xpath解析库,因为是纯练习性质,所以分别解析了两趟,最后把数据写入txt文档中。
打开浏览器,键入http://www.weather.com.cn/weather/101190401.shtml进入中国天气网,鼠标右键保存网页。命名为1.html
现在开始操作了:
- import os
- os.chdir("C:\\Users\\TIM")
这是转到我保存网页的地址,chdir中的地址随保存路径而定。
- from bs4 import BeautifulSoup
- import requests
- result2 = requests.get("http://www.weather.com.cn/weather/101190401.shtml")
- r2 = result2.text
- soup = BeautifulSoup(r2, 'lxml')
- print(soup.prettify())
第二步用靓汤解析,requests库用于爬取网页html代码并保存于result变量,最后的prettify()使得代码以缩进形式呈现。缩进形式方便查看需要数据所在的位置。
- from lxml import etree#引入xpath库
- html = etree.parse('./test.html', etree.HTMLParser())#将保存的网页进行解析
- result = html.xpath('//script/text()')#解析script标签的文本信息
- print(result)#打印至屏幕以确认无误
根据之前用beautifulsoup显示的网页信息发现要找的数据在script标签下。用xpath解析相应标签,从序号0开始到最后一个,例如打印序号为0的标签:
- r = list(result[0].split(','))#将爬取的结果转为列表并以逗号分隔
- print(r)#打印至屏幕以确认无误
输入至文本文档。
- import sys
- class Logger(object):
- def __init__(self, fileN="Default.log"):
- self.terminal = sys.stdout
- self.log = open(fileN, "a", encoding="utf-8")
-
- def write(self, message):
- self.terminal.write(message)
- self.log.write(message)
-
- def flush(self):
- pass
定义了logger类,其功能是使得屏幕输出保存到txt文件。
- import os
- from lxml import etree
- from bs4 import BeautifulSoup
- import requests
- import sys
-
- class Logger(object):
- def __init__(self, fileN="Default.log"):
- self.terminal = sys.stdout
- self.log = open(fileN, "a", encoding="utf-8")
-
- def write(self, message):
- self.terminal.write(message)
- self.log.write(message)
-
- def flush(self):
- pass
-
- os.chdir("C:\\Users\\TIM")
- html = etree.parse('./test.html', etree.HTMLParser())
- result = html.xpath('//script/text()')
- r = list(result[0].split(','))
- sys.stdout = Logger("D:\\11.txt")
- print(r)
-
- print('\n')
-
- result2 = requests.get("http://www.weather.com.cn/weather/101190401.shtml")
- r2 = result2.text
- soup = BeautifulSoup(r2, 'lxml')
- print(soup.prettify())
END
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。