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

如何在一个空间做2个网站上海网站设计公司电话

如何在一个空间做2个网站,上海网站设计公司电话,网站规划设计书,江西赣州最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研 网页如下所示: 可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只是发起了javascript网络访问,然后将服务器返回的数据插入网页,无法通过网址直接获取对应页…  最近有一个需求,需要爬取东方财富网的机构调研数据.数据所在的网页地址为: 机构调研   网页如下所示:      可见数据共有8464页,此处不能直接使用scrapy爬虫进行爬取,因为点击下一页时,浏览器只是发起了javascript网络访问,然后将服务器返回的数据插入网页,无法通过网址直接获取对应页的的页面数据.   通过chrome的开发者工具,我们可以看到点击下一页按钮背后发起的网页访问:   在点击下一页时,浏览器向地址发起了访问.我们分析一下这个地址的结构:     http://data.eastmoney.com/DataCenter_V3/jgdy/xx.ashx?pagesize50page2jsvar%20ZUPcjFOKparamsortRule-1sortType0rt48759234   上述地址中的page  之后指定的是需要获取第几个页面的数据.所以我们可以通过修改page后面的数字来访问不同页面对应的数据.   现在看一下这个数据的结构:   可见这个数据是一个字符串,根据第一个出现的等于号对该字符串进行切分,切分得到的后半段是一个json字符串,里面存储了我们想要获取的数据. json数据中的字段pages的值就是页面的总数.根据这一特性我们可以写出下述函数获取页面的总数: # 获取页数 def get_pages_count():url http://data.eastmoney.com/DataCenter_V3/jgdy/xx.ashx?pagesize50page%d % 1url jsvar%20ngDoXCbVparamsortRule-1sortType0rt48753724wp urllib.urlopen(url)data wp.read().decode(gbk)start_pos data.index()json_data data[start_pos 1:]dict json.loads(json_data)pages dict[pages]return pages   在给定页数范围的情况下可以获取数据地址列表,如下所示: # 获取链接列表 def get_url_list(start,end):url_list[]while(startend):url http://data.eastmoney.com/DataCenter_V3/jgdy/xx.ashx?pagesize50page%d %starturl jsvar%20ngDoXCbVparamsortRule-1sortType0rt48753724url_list.append(url)start1return url_list   为了保存这些数据,我使用sqlalchemy中的orm模型来表示数据模型,数据模型定义如下: # 此处需要设置charset,否则中文会乱码 engine create_engine(mysqlmysqldb://user:passwdip:port/db_name?charsetutf8) Base declarative_base()class jigoudiaoyan(Base):__tablename__ jigoudiaoyan# 自增的主键id Column(Integer,primary_keyTrue)# 调研日期StartDate Column(Date,nullableTrue)# 股票名称SName Column(VARCHAR(255),nullableTrue)# 结束日期 一般为空EndDateColumn(Date,nullableTrue)# 接待方式Description Column(VARCHAR(255),nullableTrue)# 公司全称CompanyName Column(VARCHAR(255),nullableTrue)# 结构名称OrgNameColumn(VARCHAR(255),nullableTrue)# 公司代码CompanyCodeColumn(VARCHAR(255),nullableTrue)# 接待人员LicostaffColumn(VARCHAR(800),nullableTrue)# 一般为空 意义不清OrgSumColumn(VARCHAR(255),nullableTrue)# 涨跌幅ChangePercentColumn(Float,nullableTrue)# 公告日期NoticeDateColumn(Date,nullableTrue)# 接待地点PlaceColumn(VARCHAR(255),nullableTrue)# 股票代码SCodeColumn(VARCHAR(255),nullableTrue)# 结构代码OrgCodeColumn(VARCHAR(255),nullableTrue)# 调研人员PersonnelColumn(VARCHAR(255),nullableTrue)# 最新价CloseColumn(Float,nullableTrue)#机构类型OrgtypeNameColumn(VARCHAR(255),nullableTrue)# 机构类型代码OrgtypeColumn(VARCHAR(255),nullableTrue)# 主要内容,一般为空 意义不清MaincontentColumn(VARCHAR(255),nullableTrue) Session sessionmaker(bindengine) session Session() # 创建表 Base.metadata.create_all(engine) # 获取链接列表   在上述基础上,我们就可以定义下属函数用于抓取链接的内容,并将其解析之后存入数据库,如下所示: #记录并保存数据 def save_json_data(user_agent_list):pages get_pages_count() len_user_agentlen(user_agent_list)url_list get_url_list(1,pages)count0for url in url_list:request urllib2.Request(url)request.add_header(Referer,http://data.eastmoney.com/jgdy/)# 随机从user_agent池中取userpos random.randint(0,len_user_agent-1)request.add_header(User-Agent, user_agent_list[pos])reader urllib2.urlopen(request)datareader.read()# 自动判断编码方式并进行解码encoding chardet.detect(data)[encoding]# 忽略不能解码的字段data data.decode(encoding,ignore)start_pos data.index()json_data data[start_pos 1:]dict json.loads(json_data)list_data dict[data]count1for item in list_data:one jigoudiaoyan()StartDate item[StartDate].encode(utf8)if(StartDate ):StartDate Noneelse:StartDate datetime.datetime.strptime(StartDate,%Y-%m-%d).date()SNameitem[SName].encode(utf8)if(SName ):SName NoneEndDate item[EndDate].encode(utf8)if(EndDate):EndDateNoneelse:EndDatedatetime.datetime.strptime(EndDate,%Y-%m-%d).date()Descriptionitem[Description].encode(utf8)if(Description ):Description NoneCompanyNameitem[CompanyName].encode(utf8)if(CompanyName):CompanyNameNoneOrgNameitem[OrgName].encode(utf8)if(OrgName ):OrgNameNoneCompanyCodeitem[CompanyCode].encode(utf8)if(CompanyCode):CompanyCodeNoneLicostaffitem[Licostaff].encode(utf8)if(Licostaff ):LicostaffNoneOrgSum item[OrgSum].encode(utf8)if(OrgSum ):OrgSumNoneChangePercentitem[ChangePercent].encode(utf8)if(ChangePercent ):ChangePercentNoneelse:ChangePercentfloat(ChangePercent)NoticeDateitem[NoticeDate].encode(utf8)if(NoticeDate):NoticeDateNoneelse:NoticeDatedatetime.datetime.strptime(NoticeDate,%Y-%m-%d).date()Placeitem[Place].encode(utf8)if(Place):PlaceNoneSCodeitem[SCode].encode(utf8)if(SCode):SCodeNoneOrgCodeitem[OrgCode].encode(utf8)if(OrgCode):OrgCodeNonePersonnelitem[Personnel].encode(utf8)if(Personnel):PersonnelNoneCloseitem[Close].encode(utf8)if(Close):CloseNoneelse:Close float(Close)OrgtypeName item[OrgtypeName].encode(utf8)if(OrgtypeName):OrgtypeNameNoneOrgtypeitem[Orgtype].encode(utf8)if(Orgtype):OrgtypeNoneMaincontentitem[Maincontent].encode(utf8)if(Maincontent):MaincontentNoneone.StartDateStartDateone.SNameSNameone.EndDateEndDateone.DescriptionDescriptionone.CompanyNameCompanyNameone.OrgNameOrgNameone.CompanyCodeCompanyCodeone.LicostaffLicostaffone.OrgSumOrgSumone.ChangePercentChangePercentone.NoticeDateNoticeDateone.PlacePlaceone.SCodeSCodeone.OrgCodeOrgCodeone.PersonnelPersonnelone.CloseCloseone.OrgtypeNameOrgtypeNameone.OrgtypeOrgtypeone.MaincontentMaincontentsession.add(one)session.commit()print percent: ,count*1.0/pages,complete!,now ,count# delay 1stime.sleep(1)   为了加快抓取速度,我设置了user_agent池,每次访问设置user_agent时随机从池中取一条作为这次访问的user_agent.对应列表user_agent_list ,定义如下: # user_agent 池 user_agent_list[] user_agent_list.append(Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 ) user_agent_list.append(Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50) user_agent_list.append(Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1) user_agent_list.append(Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11) user_agent_list.append(Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 ) user_agent_list.append(Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36)   请注意,为了自动识别网页编码并解码,我使用了chardet模块识别网页的编码.为了应对极端情况下解码失败的问题,我在解码时设置跳过那些不能正确解码的字符串.相关代码截取如下: encoding chardet.detect(data)[encoding]# 忽略不能解码的字段data data.decode(encoding,ignore) 补充:   网址中最后一个字段代码时间戳,用于确定获取哪一个时刻的最新价(maybe for ban crawler?),在查看网页源代码之后,我确定时间戳的生成代码如下,给有需要的人(我发现东方财富网的这个字段都是这么生成的): # 获取当前的时间戳 def get_timstamp():timestamp int(int(time.time())/30)return str(timestamp)  转载于:https://www.cnblogs.com/zhoudayang/p/5474053.html
http://wiki.neutronadmin.com/news/71835/

相关文章:

  • 太仓网站公司wordpress主题学习
  • 做网站老板不发工资我拿尾款十九冶成都建设网站
  • 怎么做好网站建设wordpress带投稿模板
  • 张家界城乡建设网站山东浩景建设有限公司网站
  • 经营网站 备案信息管理系统商城网站建设专业公司
  • 鲜花店网站页面-欧美模板1psd重庆市安全建设工程信息
  • 正规代做毕业设计的网站做电商网站都需要学什么软件
  • 兰州网站公司python用于网站开发
  • 南通建设工程造价信息网站德州网站制作
  • 改图网网站谁做的wordpress设置多域名多站点
  • 百度推广送企业网站吗网站设计制作公司大全
  • nodejs做企业网站seo收录查询
  • 网站建设规划方案制作上饶商城网站建设
  • 山西网站seo广州平面设计工作室
  • jsp网站开发遇到的问题市场推广方案和思路
  • 网站建设捌金手指花总十六网站正在建设模板
  • 美橙西安网站备案拍照服装网站技术解决方案
  • zhon中国建设会计学会网站wordpress开发主题
  • 南乐网站建设价格自然资源网站建设方案
  • 陕西长城建设工程有限公司网站可以用来做简单的网络验证的网站
  • 口碑好网站建设报价官网网站源码
  • 镇江哪里做网站电子商务网站建设与维护方法分析不包括哪些
  • 沧州 网站建设赤壁网站建设公司
  • 深圳专业网站设计公司做教育app的网站
  • 镇江企业做网站做网站项目前期工作包括哪些
  • 太平鸟品牌门户网站建设网站国外推广
  • 在线网站建设机构查看网站用什么语言做的
  • 淮安建设银行招聘网站天津专业的做网站与运营的公司
  • 旅游网站模板图片秦皇岛百度网站排名
  • 网站建设的一般费用生意网app下载官网