当前位置: 首页 > news >正文

如何选择丹徒网站建设河南企业网官方网站

如何选择丹徒网站建设,河南企业网官方网站,公司网站设计素材,深圳市福田区652号本篇文章我们以抓取历史天气数据为例#xff0c;简单说明数据抓取的两种方式#xff1a;1、一般简单或者较小量的数据需求#xff0c;我们以requests(selenum)beautiful的方式抓取数据2、当我们需要的数据量较多时#xff0c;建议采用scrapy框架进行数据采集#xff0c;sc…本篇文章我们以抓取历史天气数据为例简单说明数据抓取的两种方式1、一般简单或者较小量的数据需求我们以requests(selenum)beautiful的方式抓取数据2、当我们需要的数据量较多时建议采用scrapy框架进行数据采集scrapy框架采用异步方式发起请求数据抓取效率极高。下面我们以http://www.tianqihoubao.com/lishi/网站数据抓取为例进行进行两种数据抓取得介绍1、以requestbs的方式采集天气数据并以mysql存储数据思路我们要采集的天气数据都在地址 http://www.tianqihoubao.com/lishi/beijing/month/201101.html 中存储观察url可以发现url中只有两部分在变化即城市名称和你年月而且每年都固定包含12个月份可以使用 months list(range(1, 13))构造月份将城市名称和年份作为变量即可构造出需要采集数据的url列表遍历列表请求url解析response即可获取数据。以上是我们采集天气数据的思路首先我们需要构造url链接。1 defget_url(cityname,start_year,end_year):2 years list(range(start_year, end_year))3 months list(range(1, 13))4 suburl http://www.tianqihoubao.com/lishi/5 urllist []6 for year inyears:7 for month inmonths:8 if month 10:9 url suburl cityname /month/ str(year) (str(0) str(month)) .html10 else:11 url suburl cityname /month/ str(year) str(month) .html12 urllist.append(url.strip())13 return urllist通过以上函数可以得到需要抓取的url列表。可以看到我们在上面使用了cityname而cityname就是我们需要抓取的城市的城市名称需要我们手工构造假设我们已经构造了城市名称的列表存储在mysql数据库中我们需要查询数据库获取城市名称遍历它将城市名称和开始年份结束年份给上面的函数。1 defget_cityid(db_conn,db_cur,url):2 suburl url.split(/)3 sql select cityid from city where cityname %s4 db_cur.execute(sql,suburl[4])5 cityid db_cur.fetchone()6 idlist list(cityid)7 return idlist[0]有了城市代码开始和结束年份生成了url列表接下来当然就是请求地址解析返回的html代码了此处我们以bs解析网页源代码代码如下1 defparse_html_bs(db_conn,db_cur,url):2 proxy get_proxy()3 proxies {4 http: http:// proxy,5 https: https:// proxy,6 }7 headers {8 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36,9 Connection: close10 }1112 #获取天气数据的html网页源代码13 weather_data requests.get(urlurl, headersheaders,proxies proxies).text14 weather_data_new (weather_data.replace(\n,).replace(\r,).replace( ,))15 soup BeautifulSoup(weather_data_new,lxml)16 table soup.find_all([td])17 #获取城市id18 cityid get_cityid(db_conn, db_cur, url)19 listall []20 for t inlist(table):21 ts t.string22 listall.append(ts)23 n 424 sublist [listall[i:in] for i inrange(0,len(listall),n)]25 sublist.remove(sublist[0])26 flist []27 #将列表元素中的最高和最低气温拆分方便后续数据分析并插入城市代码28 for sub insublist:29 if sub sublist[0]:30 pass31 sub2 sub[2].split(/)32 sub.remove(sub[2])33 sub.insert(2, sub2[0])34 sub.insert(3, sub2[1])35 sub.insert(0, cityid) #插入城市代码36 flist.append(sub)37 return flist最后我们在主函数中遍历上面的列表并将解析出来的结果存储到mysql数据库。1 if __name__ __main__:2 citylist get_cityname(db_conn,db_cur)3 for city incitylist:4 urllist get_url(city,2016,2019)5 for url inurllist:6 time.sleep(1)7 flist parse_html_bs(db_conn, db_cur, url)8 for li inflist:9 tool.dyn_insert_sql(weather,tuple(li),db_conn,db_cur)10 time.sleep(1)以上我们便完成了以requestsbs方式抓取历史天气数据并以mysql存储的程序代码完成代码见https://gitee.com/liangxinbin/Scrpay/blob/master/weatherData.py2、用scrapy框架采集天气数据并以mongo存储数据1)定义我们需要抓取的数据结构修改框架中的items.py文件1 classWeatherItem(scrapy.Item):2 #define the fields for your item here like:3 #name scrapy.Field()4 cityname Field() #城市名称5 data Field()    #日期6 tq Field()     #天气7 maxtempField()   #最高温度8 mintempField()   #最低温度9 fengliField()    #风力2)修改下载器中间件随机获取user-agentip地址1 classRandomUserAgentMiddleware():2 def __init__(self,UA):3 self.user_agents UA45 classmethod6 deffrom_crawler(cls, crawler):7 return cls(UA crawler.settings.get(MY_USER_AGENT)) #MY_USER_AGENT在settings文件中配置通过类方法获取89 defprocess_request(self,request,spider):10 request.headers[User-Agent] random.choice(self.user_agents) #随机获取USER_AGENT1112 defprocess_response(self,request, response, spider):13 returnresponse141516 classProxyMiddleware():17 def __init__(self):18 ipproxy requests.get(http://localhost:5000/random/) #此地址为从代理池中随机获取可用代理19 self.random_ip http:// ipproxy.text2021 defprocess_request(self,request,spider):22 print(self.random_ip)23 request.meta[proxy] self.random_ip2425 defprocess_response(self,request, response, spider):26 return response3)修改pipeline文件处理返回的item处理蜘蛛文件返回的item1 importpymongo23 classMongoPipeline(object):45 def __init__(self,mongo_url,mongo_db,collection):6 self.mongo_url mongo_url7 self.mongo_db mongo_db8 self.collection collection910 classmethod14 deffrom_crawler(cls,crawler):15 returncls(16 mongo_urlcrawler.settings.get(MONGO_URL), #MONGO_URL,MONGO_DB,COLLECTION在settings文件中配置通过类方法获取数据17 mongo_db crawler.settings.get(MONGO_DB),18 collection crawler.settings.get(COLLECTION)19 )2021 defopen_spider(self,spider):22 self.client pymongo.MongoClient(self.mongo_url)23 self.db self.client[self.mongo_db]2425 defprocess_item(self,item, spider):26 #name item.__class__.collection27 name self.collection28 self.db[name].insert(dict(item)) #将数据插入到mongodb数据库。29 returnitem3031 defclose_spider(self,spider):32 self.client.close()4)最后也是最重要的编写蜘蛛文件解析数据先上代码在解释1 #-*- coding: utf-8 -*-2 importscrapy3 from bs4 importBeautifulSoup4 from scrapy importRequest5 from lxml importetree6 from scrapymodel.items importWeatherItem789 classWeatherSpider(scrapy.Spider):10 name weather #蜘蛛的名称在整个项目中必须唯一11 #allowed_domains [tianqihoubao]12 start_urls [http://www.tianqihoubao.com/lishi/] #起始链接用这个链接作为开始爬取数据它的返回数据默认返回给parse来解析。131415 #解析http://www.tianqihoubao.com/lishi/网页,提取连接形式http://www.tianqihoubao.com/lishi/beijing.html16 defparse(self, response):17 soup BeautifulSoup(response.text, lxml)18 citylists soup.find_all(namediv, class_citychk)19 for citys incitylists:20 for city in citys.find_all(namedd):21 url http://www.tianqihoubao.com city.a[href]22 yield Request(urlurl,callback self.parse_citylist) #返回Request对象作为新的url由框架进行调度请求返回的response有回调函数parse_citylist进行解析2324 #解析http://www.tianqihoubao.com/lishi/beijing.html网页提取链接形式为http://www.tianqihoubao.com/lishi/tianjin/month/201811.html25 defparse_citylist(self,response):26 soup BeautifulSoup(response.text, lxml)27 monthlist soup.find_all(namediv, class_wdetail)28 for months inmonthlist:29 for month in months.find_all(nameli):30 if month.text.endswith(季度:):31 continue32 else:33 url month.a[href]34 url http://www.tianqihoubao.com url35 yield Request(url url,callback self.parse_weather) #返回Request对象作为新的url由框架进行调度请求返回的response由parse_weather进行解析3637 #以xpath解析网页数据;38 defparse_weather(self,response): #解析网页数据返回数据给pipeline处理39 #获取城市名称40 url response.url41 cityname url.split(/)[4]4243 weather_html etree.HTML(response.text)44 table weather_html.xpath(//table//tr//td//text())45 #获取所有日期相关的数据存储在列表中46 listall []47 for t intable:48 if t.strip() :49 continue50 #替换元素中的空格和\r\n51 t1 t.replace( , )52 t2 t1.replace(\r\n, )53 listall.append(t2.strip())54 #对提取到的列表数据进行拆分将一个月的天气数据拆分成每天的天气情况方便数据插入数据库55 n 456 sublist [listall[i:i n] for i inrange(0, len(listall), n)]57 #删除表头第一行58 sublist.remove(sublist[0])59 #将列表元素中的最高和最低气温拆分方便后续数据分析并插入城市代码6061 for sub insublist:62 if sub sublist[0]:63 pass64 sub2 sub[2].split(/)65 sub.remove(sub[2])66 sub.insert(2, sub2[0])67 sub.insert(3, sub2[1])68 sub.insert(0, cityname)6970 Weather WeatherItem() #使用items中定义的数据结构7172 Weather[cityname] sub[0]73 Weather[data] sub[1]74 Weather[tq] sub[2]75 Weather[maxtemp] sub[3]76 Weather[mintemp] sub[4]77 Weather[fengli] sub[5]78 yield Weather运行项目即可获取数据至此我们完成了天气数据的抓取项目。项目完整代码https://gitee.com/liangxinbin/Scrpay/tree/master/scrapymodel
http://www.yutouwan.com/news/308789/

相关文章:

  • 商城网站模版代码长沙做网站找谁
  • 外贸营销型建站网站建设适合的企业
  • 沈阳方正建设监理网站北京公司注册地址查询
  • 供灯放生网站开发中国建筑官网一测二测成绩多少算及格
  • 重庆网站seo按天计费怎么修改wordpress主题字体
  • 网站建设公司的公司排名手机网站的后台管理
  • 济南网站搜索排名北京网站案例
  • 电商网站建设技术可行性分析怎么看wordpress用了哪个主题
  • 10个零网站建设建e网室内设计网下载
  • 网上书城网站开发的目的与意义中国建设的网站
  • 中国空间站扩展网站设计用户体验
  • 正阳县网站建设个体户网站备案
  • 手机建设网站的目的阿里云虚拟主机怎么建设网站
  • 从哪些方面评价一个企业的网站建设互联网挣钱项目平台
  • 学校网站如何建设网站建设的前后台代码
  • 东莞住房和城乡建设厅网站建设什么样的网站月入一万
  • 哪个网站可以做效果图wordpress strip_tags
  • 做电影网站侵权吗一流的江苏网站建设
  • soho外贸网站用jsp做的网站源代码
  • 网站开发学些什么北京王府井简介
  • 天津网站建设普斯泰python在线编程题库
  • 营销型网站建设的优缺点wordpress安装好后
  • 如何用python做网站脚本语言wordpress修改404页面
  • 莘县住房建设局网站网站维护怎么样
  • 凯里市经济开发区建设局网站seo排名软件
  • 自己怎么做淘宝客网站吗wordpress文章标题过长
  • 郑州市网站建设哪家公司好帮人做钓鱼网站以及维护
  • 网站开发的难点与重点asp化妆品网站源码
  • 怎么样增加网站权重wordpress快速审批
  • 执法局网站建设目的前端自己写代码建网站要花多少钱