博客
关于我
pycharm+python+MS SQLSERVER 实战2、实现爬虫程序。
阅读量:362 次
发布时间:2019-03-04

本文共 4798 字,大约阅读时间需要 15 分钟。

实战2、pycharm+python+MS SQLSERVER实现爬虫程序。

 

实现 python 爬老毛桃网站    u盘启动制作工具 所有版本号,然后写入MS SQLSERVER数据库中

稍后更新...

首先在pycharm的点左下角的  Terminal ,输入pip install requests    和  pip install BeautifulSoup4 安装包

一、先热下身,写第一个 爬百度网站。

import requests

from bs4 import BeautifulSoup

resp=requests.get('https://www.baidu.com') #请求百度首页

print(resp) #打印请求结果的状态码
print(resp.content) #打印请求到的网页源码

bsobj=BeautifulSoup(resp.content,'lxml') #将网页源码构造成BeautifulSoup对象,方便操作

a_list=bsobj.find_all('a') #获取网页中的所有a标签对象
text='' # 创建一个空字符串
for a in a_list:
    href=a.get('href') #获取a标签对象的href属性,即这个对象指向的链接地址
    text+=href+'\n' #加入到字符串中,并换行
with open('url.txt','w') as f: #在当前路径下,以写的方式打开一个名为'url.txt',如果不存在则创建
    f.write(text) #将text里的数据写入到文本中

二、爬 老毛桃网站

老毛桃网站有防爬,所以我改为另一个网友的例子并加入写入数据库部分。

我们要爬的网站 

1、首先在MS SQLSERVER 中 建立新表t_tq

2、pycharm IDE 中选new project->pure python , 在项目上新建一个python文件testtq.py 然后拷贝入如下代码

import requestsimport csvimport randomimport timeimport socketimport http.client# import urllib.requestfrom bs4 import BeautifulSoupimport pymssqldef insert(results):    # Create your views here.    # 打开数据库连接    db = pymssql.connect(host='127.0.0.1', user='sa', password='3201319', database='bhjs', port=1433)    # 使用cursor()方法获取操作游标    cur = db.cursor()    sql = "INSERT INTO t_tq  (rq,tq,zgwd,zdwd)  VALUES (%s, %s,  %s, %s)"    try:        cur.execute(sql,(results['rq'],results['tq'],results['zgwd'],results['zdwd'])) # 执行sql语句        #results = cur.fetchall()  # 所有记录        db.commit()    except Exception as e:        raise e    return resultsdef get_content(url , data = None):    header={        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',        'Accept-Encoding': 'gzip, deflate, sdch',        'Accept-Language': 'zh-CN,zh;q=0.8',        'Connection': 'keep-alive',        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235'    }    timeout = random.choice(range(80, 180))    while True:        try:            rep = requests.get(url,headers = header,timeout = timeout)            rep.encoding = 'utf-8'            # req = urllib.request.Request(url, data, header)            # response = urllib.request.urlopen(req, timeout=timeout)            # html1 = response.read().decode('UTF-8', errors='ignore')            # response.close()            break        # except urllib.request.HTTPError as e:        #         print( '1:', e)        #         time.sleep(random.choice(range(5, 10)))        #        # except urllib.request.URLError as e:        #     print( '2:', e)        #     time.sleep(random.choice(range(5, 10)))        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.textdef get_data(html_text):    item_p={'rq':50,'tq':50,'zgwd':50,'zdwd':50}    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中        item_p['rq']=date        inf = day.find_all('p')  # 找到li中的所有p标签        temp.append(inf[0].string)  # 第一个p标签中的内容(天气状况)加到temp中        item_p['tq']=inf[0].string        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中        item_p['zgwd']=temperature_highest        item_p['zdwd']=temperature_lowest        final.append(temp)   #将temp加到final中        insert(item_p)    return finaldef 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, 'weather.csv')

 

3、运行,在SQLSERVER中可得到如下结果

 

 

             打呆仗,结硬寨,用最好的工具。——曾国藩

             

            

 

转载地址:http://sjbr.baihongyu.com/

你可能感兴趣的文章
nginx+Tomcat性能监控
查看>>
nginx+uwsgi+django
查看>>
nginx+vsftp搭建图片服务器
查看>>
Nginx-http-flv-module流媒体服务器搭建+模拟推流+flv.js在前端html和Vue中播放HTTP-FLV视频流
查看>>
nginx-vts + prometheus 监控nginx
查看>>
nginx: [emerg] getpwnam(“www”) failed 错误处理方法
查看>>
nginx:Error ./configure: error: the HTTP rewrite module requires the PCRE library
查看>>
Nginx、HAProxy、LVS
查看>>
Nginx下配置codeigniter框架方法
查看>>
Nginx中使用expires指令实现配置浏览器缓存
查看>>
Nginx之二:nginx.conf简单配置(参数详解)
查看>>
Nginx代理websocket配置(解决websocket异常断开连接tcp连接不断问题)
查看>>
Nginx代理初探
查看>>
nginx代理地图服务--离线部署地图服务(地图数据篇.4)
查看>>
Nginx代理外网映射
查看>>
Nginx代理模式下 log-format 获取客户端真实IP
查看>>
Nginx代理解决跨域问题(导致图片只能预览不能下载)
查看>>
Nginx代理配置详解
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>