分享

Python 实现中国天气小爬虫

 长沙7喜 2017-12-31




实现过程


1.原理

通过Chrome的开发者工具浏览elements;

找到keyword:id='hidden_value',发现是唯一元素且显示了当天的天气情况;

通过Requests请求页面,Beautiful Soup定位。

2.实现中遇到的问题

使用requests模块请求的时候遇到中文都是乱码;

使用Beautiful Soup模块匹配到的list怎么拆解分析到最后结果。

 

3.解决问题

使用requests.encoding发现代码是ISO-8859-1格式,所以通过encoding将格式设定在'utf-8';

先用str强制转换类型再用string.split切割字符串。


代码:


import requests

from bs4 import BeautifulSoup

import re

r = requests.get('http://www.weather.com.cn/weather/101020100.shtml')

print(r.encoding)

r.encoding = 'utf-8'    #防止乱码出现

soup = BeautifulSoup(r.text, 'html.parser')

todayinfolist = soup.find_all(id='hidden_title')

str_todayinfo = str(todayinfolist[0])   #将列表元素转换为字符串

split1 = str_todayinfo.split('value='')

str_split1 = str(split1[1])

todayinfo = str_split1.split(''')

print(todayinfo[0])


Python简单爬虫入门


为大家介绍一个简单的爬虫工具BeautifulSoup。 BeautifulSoup拥有强大的解析网页及查找元素的功能本次测试环境为python3.4(由于python2.7编码格式问题)。

 

此工具在搜索你想爬的数据匹配的方式就是html标签嵌套的顺序(html介绍在其它随笔内)。

 

首先来聊聊BeautifulSoup的安装pip install python-bs4 包含BeautifulSoup方法,再来安装依赖工具requests和解析格式lxml下载安装包 解压进入目录 python setup.py install此方法是请求服务。

 

先来写一个简单的网页解析代码如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

from bs4 import BeautifulSoup

import requests

headers = {

    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',

}

url = 'http://www.jd.com/'

 

wb_data = requests.get(url,headers=headers)

soup = BeautifulSoup(wb_data.text,'lxml')

print(soup)

来简单说明下每行代码的作用:


bs4库里import导入BeautifulSoup方法;

import导入requests方法;

headers表示头文件,伪装成浏览器浏览网页,当然我这里写得简单还没写全;

url网页地址;

wb_data网页数据requests.get请求访问(url网页京东,headers伪装的头文件)

soup解析后的数据BeautifulSoup解析数据(wb_data网页数据,lxml解析的格式按这个要求解析)

 

print答应soup解析后的网页数据,也就是网页源代码如下(由于网页源代码很长所以这里截图只能显示一部分)


学好基础包括html的结构标签的嵌套还有CSS的名字在网页位置等后教你们怎么去抓电影等网站并且把内容归类好方便查阅。

 

下面是我抓去某电影网站的数据及归类效果掩饰:

 

Python简单爬虫示例

#coding=utf-8

import urllib

import re

 

def downloadPage(url):

    h = urllib.urlopen(url)

    return h.read()

 

def downloadImg(content):

    pattern = r'src='(.+?\.jpg)' pic_ext'

    m = re.compile(pattern)

    urls = re.findall(m, content)

 

    for i, url in enumerate(urls):

        urllib.urlretrieve(url, '%s.jpg' % (i, ))

 

content = downloadPage('http://tieba.baidu.com/p/2460150866')

downloadImg(content)


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多