python请求网页、获取网页信息_python网页信息抓取

自动抓取网页信息,也就是爬虫,一般通过js或者python都可以较方便的实现。都是通过

模拟发送页面请求,然后解析html页面的元素来提取信息。

function wraperAxiosHour(cityCode) {

return new Promise((resolve, reject) => {

const url = `http://www.weather.com.cn/weather1dn/${cityCode}.shtml`;

axios

.get(url)

.then(function(response) {

const $ = cheerio.load(response.data, {

decodeEntities: false

});

let hasBody = $("body").html();

if (hasBody == "") {

let errorInfo = {

msg: "城市代码错误",

code: 500

};

reject(errorInfo);

return;

}

let todayData = $(".todayRight script")

.html()

.replace("var hour3data=", "")

.replace(/\n/g, "")

.split(";");

todayData.pop();

//24小时

// console.log(jsonToObj(todayData[0]))

let forecastList1 = getPerTimeList(jsonToObj(todayData[0])[0])

.drgeeData;

let forecastList2 = getPerTimeList(jsonToObj(todayData[0])[1])

.drgeeData;

let forecastListob = forecastList1.concat(forecastList2);

let forecastList = forecastListob.slice(0, 24);

let lifeAssistant = getLv(0, $);

let sunup = jsonToObj(todayData[7].replace("var sunup =", ""))[1];

let sunset = jsonToObj(todayData[8].replace("var sunset =", ""))[1];

let max_degree = jsonToObj(

todayData[3].replace("var eventDay =", "")

)[2];

let min_degree = jsonToObj(

todayData[4].replace("var eventNight =", "")

)[1];

// console.log(max_degree,min_degree,sunup,sunset)

resolve({

forecastList,

lifeAssistant,

max_degree,

min_degree,

sunup,

sunset

});

})

.catch(err => reject(err));

});

}

python的做法:

python3中requests库和urllib包都可以用来发送请求,注意urllib已经升级到3了。

区别:(转)

1)构建参数:在构建请求参数时,第一种需要将请求参数使用urllib库的urlencode方法进行编码预处理,非常麻烦

2)请求方法:发送get请求时,第一种使用的urllib库的urlopen方法打开一个url地址,而第二种直接使用requests库的get方法,与http请求方式是对应的,更加直接、易懂

3)请求数据:第一种按照url格式去拼接一个url字符串,显然非常麻烦,第二种按顺序将get请求的url和参数写好就可以了

4)处理响应:第一种处理消息头部、.getcode()、响应状态码和响应正文时分别使用.info()、.read()方法,第二种使用.headers、.status_code、.text方法,方法名称与功能本身相对应,更方便理解、学习和使用

5)连接方式:看一下返回数据的头信息的“connection”,使用urllib库时,“connection”:“close”,说明每次请求结束关掉socket通道,而使用requests库使用了urllib3,多次请求重复使用一个socket,“connection”:“keep-alive”,说明多次请求使用一个连接,消耗更少的资源

6)编码方式:requests库的编码方式Accept-Encoding更全

获取html以后,一种是直接使用python的re的正则表达式模块。一种是用BeautifulSoup 来解析。

def getTemp(html):

text = "".join(html.split())

patten = re.compile('(.*?)

')

table = re.findall(patten, text)

patten1 = re.compile('

  • (.*?)
')

uls = re.findall(patten1, table[0])

rows = []

for ul in uls:

patten2 = re.compile('

(.*?)')

lis = re.findall(patten2, ul)

time = re.findall('>(.*?)', lis[0])[0]

high = lis[1]

low = lis[2]

rows.append((time, high, low))

return rows

soup = BeautifulSoup(text, 'html5lib')

conMidtab = soup.find("div", class_="conMidtab")

tables = conMidtab.find_all('table')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值