python第一次实现爬数据,不过还是不太懂其中的原理,只是拿过来就用了
第一次实现了爬数据,小心脏还是挺高兴的。
试着在爬下了百度的新闻,然后美团的数据,饿了吗和新浪试了下不行,原因可能是https的关系
这是抓取的美团的数据,不过User-Agent的参数要填自己的,建议用fiddler2抓包工具
话不多说,上代码。
# -*- coding:utf-8 -*- import re from bs4 import BeautifulSoup import json import threading from requests import Session class dazp_bj: def __init__(self,category): self.baseUrl='https://http://sz.meituan.com' self.bgurl=category[0] self.typename=category[1] self.page=1 self.pagenum=10 #设置最大页面数目,大众点评每个条目下最多有50页,可以根据自己需求进行设置 self.headers={ "Host":"report.meituan.com", "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko", #此User-Agent是我本人的参数,在使用时记得修改为自己的参数,如何获取下四.4部分有讲解 "Referer":"http://sz.meituan.com/?utm_campaign=baidu&utm_medium=organic&utm_source=baidu&utm_content=homepage&utm_term=", } def start(self): self.s=Session() #定义一个Session()对象 print self.bgurl,self.typename print "please wait for 15" dazp_bj.__parseHtml(self,self.bgurl) #调用__parseHtml函数 print 'getdata down' def __parseHtml(self,preurl): _json=dict() #定义一个字典用以存储数 html=self.s.post(preurl,headers=self.headers).text #发送请求,获取html soup=BeautifulSoup(html,'lxml') #进行解析 name=['href','title','人均消费','地址','评分','链接'] for li in soup.find('body').find('div',class_='J-holy-reco__content holy-reco__content').find_all('a'): _json[name[0]] = li['href'] _json[name[1]] = li['title'].encode('utf-8') with open(self.typename+'.json','a') as outfile: json.dump(_json,outfile,ensure_ascii=False) with open(self.typename+'.json','a') as outfile: outfile.write(',\n') # self.page+=1 # if self.page<=self.pagenum: # self.nexturl=self.baseUrl+soup.find('div',class_='page').find('a',class_='next')['href'] #获得下一页的链接 # dazp_bj.__parseHtml(self,self.nexturl) if __name__=='__main__': cat=[(r'http://sz.meituan.com/?utm_campaign=baidu&utm_medium=organic&utm_source=baidu&utm_content=homepage&utm_term=',u'火锅 ')] obj=list() obj.append(dazp_bj(cat[0])) [threading.Thread(target=foo.start(),args=()).start for foo in obj]#多线程执行obj列表中的任务