python爬虫咋运行_python 爬虫初体验 ———— 一个可运行的爬虫程序

要用到的包可以用pycharm下载:

File->Default Settings->Default Project->Project Interpreter

选择python版本并点右边的加号安装想要的包

28379f19cc131241a947f5c41d592179.png

爬取http://www.weather.com.cn/weather/101190401.shtml天气情况,代码以及解释如下:

# coding :UTF-8

import requests # 用来抓取网页的html源代码

import csv # 将数据写入到csv文件中

import random # 取随机数

import time # 时间相关操作

import socket # 用于异常处理

import http.client # 用于异常处理

from bs4 import BeautifulSoup # 用来代替正则式取源码中相应标签中的内容

# urllib.request:另一种抓取网页的html源代码的方法,但是没requests方便

# 获取网页中的html

def get_content(url):

header = { # header是requests.get的一个参数,目的是模拟浏览器访问 header 可以使用chrome的开发者工具获得,具体方法如下: 打开chrome,按F12,选择network

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'Accept - Encoding': 'gzip, deflate',

'Accept - Language': 'zh-CN,zh;q=0.9',

'Connection': 'keep-alive',

'User - Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)\

Chrome/68.0.3440.106 Safari/537.36'

}

timeout = random.choice(range(80, 180))

while True:

try:

rep = requests.get(url, headers=header, timeout=timeout) # 通过requests.get方法获取网页的源代码、

rep.encoding = 'utf-8' # 将源代码的编码格式改为utf-8

break

except socket.timeout as e: # 异常处理情况

print('3:', e)

time.sleep(random.choice(range(8, 15)))

except socket.error as e:

print('4:', e)

time.sleep(random.choice(range(20, 60)))

except http.client.BadStatusLine as e:

print('5:', e)

time.sleep(random.choice(range(30, 80)))

except http.client.IncompleteRead as e:

print('6:', e)

time.sleep(random.choice(range(5, 15)))

return rep.text

# 获取html中我们所需要的字段

def get_data(html_text):

final = []

bs = BeautifulSoup(html_text, "html.parser") # 创建BeautifulSoup对象

body = bs.body # 获取body部分

data = body.find('div', {'id': '7d'}) # 找到id为7d的div

ul = data.find('ul') # 获取ul部分

li = ul.find_all('li') # 获取所有的li

for day in li: # 对每个li标签中的内容进行遍历

temp = []

date = day.find('h1').string # 找到日期

temp.append(date) # 添加到temp中

inf = day.find_all('p') # 找到li中的所有p标签

temp.append(inf[0].string,) # 第一个p标签中的内容(天气状况)加到temp中

if inf[1].find('span') is None:

temperature_highest = None # 天气预报可能没有当天的最高气温(到了傍晚,就是这样),需要加个判断语句,来输出最低气温

else:

temperature_highest = inf[1].find('span').string # 找到最高温

temperature_highest = temperature_highest.replace('℃', '') # 到了晚上网站会变,最高温度后面也有个℃

temperature_lowest = inf[1].find('i').string # 找到最低温

temperature_lowest = temperature_lowest.replace('℃', '') # 最低温度后面有个℃,去掉这个符号

temp.append(temperature_highest) # 将最高温添加到temp中

temp.append(temperature_lowest) # 将最低温添加到temp中

final.append(temp) # 将temp加到final中

return final

# 将数据抓取出来后我们要将他们写入文件csv

def write_data(data, name):

file_name = name

with open(file_name, 'a', errors='ignore', newline='') as f:

f_csv = csv.writer(f)

f_csv.writerows(data)

# 主函数

if __name__ == '__main__':

url = 'http://www.weather.com.cn/weather/101190401.shtml'

html = get_content(url)

result = get_data(html)

write_data(result, 'weather2.csv')

运行结果:

56dafb0138a6a9a147b347423b991cb8.png

总结一下,从网页上抓取内容大致分3步:

1、模拟浏览器访问,获取html源代码

2、通过正则匹配,获取指定标签中的内容

3、将获取到的内容写到文件中

原文链接:https://blog..net/Bo_wen_/article/details/50868339

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值