当前位置: 首页 > 科技观察

GitHub超级火爆!随机爬取,超全开源爬虫工具箱

时间:2023-03-20 17:06:09 科技观察

近日,国内开发者在GitHub上开源了一个收集了众多数据源的爬虫工具箱——InfoSpider,一不小心走红了!!!现在大多数网站都有反爬虫机制。对于喜欢爬虫的朋友,想爬取一些数据,做数据分析。越来越难了。不过最近,我们发现了一个超宝爬虫工具箱。这个爬虫工具箱有多受欢迎?几天之内,OpenSource在GitHub周榜上排名第四,拥有1.3K星数,共有172个分支。同时作者开源了所有的项目代码和使用文档,B站上有视频讲解。项目代码:https://github.com/kangvcar/InfoSpider项目文档:https://infospider.vercel.app项目视频演示:https://www.bilibili.com/video/BV14f4y1R7oF/在这样的信息爆炸中现代时代,每个人都有很多账户。如果账号太多,就会出现这样一种情况:个人数据分散在各个公司,形成数据孤岛,无法整合多维数据。本项目可以帮助您整合多维数据,分析个人数据,让您对自己的信息有更直观、更深入的了解。InfoSpider是一个集成了众多数据源的爬虫工具箱。它旨在帮助用户安全快速地找回自己的数据。工具代码开源,流程透明,提供数据分析功能,根据用户数据生成图表文件。目前支持的数据源包括GitHub、QQ邮箱、网易邮箱、阿里邮箱、新浪邮箱、Hotmail邮箱、Outlook邮箱、京东、淘宝、支付宝、中国移动、中国联通、中国电信、知乎、哔哩哔哩、网易云音乐、QQ好友、QQ群、生成时刻相册、浏览器浏览记录、12306、博客园、CSDN博客、开源中国博客、简书。据创建者介绍,InfoSpider具有以下特点:安全可靠:本项目为开源项目,代码简洁,所有源代码可见,本地运行,安全可靠。简单易用:提供GUI界面,只需点击您要获取的数据源,按照提示操作即可。结构清晰:本项目所有数据源相互独立,可移植性强,所有爬虫脚本都在项目的Spiders文件下。数据源丰富:本项目目前支持多达24+个数据源,持续更新中。统一数据格式:所有爬取的数据都会以json格式存储,方便后期数据分析。丰富的个人资料:本项目会尽可能多地为您爬取个人资料,后期处理数据可根据需要删除。数据分析:本项目提供对个人数据的可视化分析,目前仅部分支持。InfoSpider也非常好用,只需要安装python3和Chrome浏览器,运行python3main.py,在打开的窗口点击数据源按钮,根据提示选择数据保存路径,然后输入账号密码即可,会自动抓取数据,根据下载的目录,可以查看抓取到的数据。依赖安装安装python3和Chrome浏览器安装与Chrome浏览器同版本的驱动安装依赖库./install_deps.sh(Windows下直接pipinstall-rrequirements.txt)运行工具进入tools目录,运行python3main。py打开点击窗口中的数据源按钮,根据提示选择数据存放路径,弹出的浏览器输入用户密码后会自动开始爬取数据。爬取后浏览器会自动关闭,可以在对应目录下查看下载的数据(xxx.json),数据分析图(xxx.html)笔者认为本项目最大的潜力在于能够整合多方维度数据,分析个人数据,最大限度发挥个人数据的效益。当然,如果你想自己练习和学习爬虫,作者也把所有的爬虫代码都开源了,非常适合实战。举个例子,比如爬取taobao的:importjsonimportrandomimporttimeimportsysimportosimportrequestsimportnumpyasnpimportmathfromlxmlimportetreefrompyqueryimportPyQueryaspqfromseleniumimportwebdriverfromselenium.webdriverimportChromeOptionsfromselenium.webdriver.common.byimportByfromselenium.webdriver.supportimportexpected_conditionsasECfromselenium.webdriver.support.waitimportWebDriverWaitfromselenium.webdriverimportChromeOptions,ActionChainsfromtkinter.filedialogimportaskdirectoryfromtqdmimporttrangedefease_out_quad(x):return1-(1-x)*(1-x)defease_out_quart(x):return1-pow(1-x,4)defease_out_expo(x):ifx==1:return1else:return1-pow(2,-10*x)defget_tracks(distance,seconds,ease_func):轨道=[0]offsets=[0]fortinnp.arange(0.0,seconds,0.1):ease=globals()[ease_func]offset=round(ease(t/seconds)*distance)tracks.append(offset-offsets[-1])offsets.append(offset)returnoffsets,tracksdefdrag_and_drop(浏览器,offset=26.5):knob=browser.find_element_by_id('nc_1_n1z')offsets,tracks=get_tracks(offset,12,'ease_out_expo')ActionChains(浏览器).click_and_hold(旋钮).perform()forxintracks:ActionChains(浏览器).move_by_offset(x,0).perform()ActionChains(浏览器).暂停(0.5)。release().perform()defgen_session(cookie):session=requests.session()cookie_dict={}list=cookie.split(';')foriinlist:try:cookie_dict[i.split('=')[0]复制代码]=i.split('=')[1]exceptIndexError:cookie_dict['']=irequests.utils.add_dict_to_cookiejar(session.cookies,cookie_dict)returnssessionclassTaobaoSpider(object):def__init__(self,cookies_list):self.path=askdirectory(title='选择信息保存文件夹')ifstr(self.path)=="":sys.exit(1)self.headers={'User-Agent':'Mozilla/5.0(Macintosh;IntelMacOSX10_14_3)AppleWebKit/537.36(KHTML,likeGecko)Chrome/73.0.3683.86Safari/537.36',}option=ChromeOptions()option.add_experimental_option('excludeSwitches',['enable-automation'])option.add_experimental_option("prefs",{"profile.managed_default_content_settings.images":2})#不添加图片,添加快速访问速度选项。add_argument('--headless')self.driver=webdriver.Chrome(options=option)self.driver.get('https://i.taobao.com/my_taobao.htm')foriincookies_list:self.driver.add_cookie(cookie_dict=i)self.driver.get('https://i.taobao.com/my_taobao.htm')self.wait=WebDriverWait(self.driver,20)#超时时间为10s#模拟下滑浏览defswipe_down(self,second):foriinrange(int(second/0.1)):#根据i的值,模拟上下滑动if(i%2==0):js="varq=document.documentElement.scrollTop="+str(300+400*i)else:js="varq=document.documentElement.scrollTop="+str(200*i)self.driver.execute_script(js)time.sleep(0.1)js="varq=document.documentElement.scrollTop=100000"self.driver.execute_script(js)time.sleep(0.1)#爬取我在淘宝买的宝贝商品数据,pn定义爬取多少页数据defcrawl_good_buy_data(self,pn=3):#为我抓取购买的宝贝商品数据self.driver.get("https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm")#遍历所有pagesforpageintrange(1,pn):data_list=[]#等待加载本页所有购买的宝贝产品数据good_total=self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#tp-bought-root>div.js-order-container')))#获取本页源码html=self.driver.page_source#pq模块解析网页源码doc=pq(html)##StorageGood_items=doc('#tp-bought-root.js-order-container').items()#遍历本页所有宝物foritemingood_items:#商品购买时间,订单号good_time_and_id=item.find('.bought-wrapper-mod__head-info-cell___29cDO').text().replace('\n',"").replace('\r',"")#商家名称#good_merchant=item。find('.seller-mod__container___1w0Cx').text().replace('\n',"").replace('\r',"")good_merchant=item.find('.bought-wrapper-mod__seller-container___3dAK3').text().replace('\n',"").replace('\r',"")#productname#good_name=item.find('.sol-mod__no-br___1PwLO').text().replace('\n',"").replace('\r',"")good_name=item.find('.sol-mod__no-br___3Ev-2').text().replace('\n',"").replace('\r',"")#商品价格good_price=item.find('.price-mod__price___cYafX').text().replace('\n',"").replace('\r',"")#只列出商品购买时间、订单号、商户名称、商品名称#其余请练习获取data_list.append(good_time_and_id)data_list.append(good_merchant)data_list.append(good_name)data_list.append(good_price)#print(good_time_and_id,good_merchant,good_name)#file_path=os.path.join(os.path.dirname(__file__)+'/user_orders.json')#file_path="../Spiders/taobao/user_orders.json"json_str=json.dumps(data_list)withopen(self.path+os.sep+'user_orders.json','a')asf:f.write(json_str)#print('\n\n')#大部分人检测为机器人是因为进一步模拟人工操作#模拟人工向下浏览商品,即模拟滑动操作,防止被识别为机器人#随机滑动延迟时间swipe_time=random.randint(1,3)self.swipe_down(swipe_time)#等待下一页按钮出现good_total=self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.pagination-next')))good_total.click()time.sleep(2)#while1:#时间.睡眠(0.2)#try:#good_total=self.driver.find_element_by_xpath('//li[@title="下一页"]')#break#except:#continue##点击下一页按钮#while1:#time.sleep(2)#try:#good_total.click()#break#exceptException:#pass#喜欢的宝贝进来爬几页,默认三页https://shoucang.taobao.com/nodejs/item_collect_chunk.htm?ifAllTag=0&tab=0&tagId=&categoryCount=0&type=0&tagName=&categoryName=&needNav=false&startRow=60defget_choucang_item(self,page=3):url='https://shoucang.taobao.com/nodejs/item_collect_chunk.htm?ifAllTag=0&tab=0&tagId=&categoryCount=0&type=0&tagName=&categoryName=&needNav=false&startRow={}'pn=0json_list=[]foriintrange(page):self.driver.get(url.format(pn))pn+=30html_str=self.driver.page_sourceifhtml_str=='':breakif'登录'inhtml_str:raiseException('登录')obj_list=etree.HTML(html_str).xpath('//li')forobjinobj_list:item={}item['title']=''.join([i.strip()foriinobj.xpath('./div[@class="img-item-title"]//text()')])item['url']=''.join([i.strip()foriinobj.xpath('./div[@class="img-item-title"]/a/@href')])item['price']=''。join([i.strip()foriinobj.xpath('./div[@class="price-container"]//text()')])ifitem['price']=='':item['price']='失效'json_list.append(item)#file_path=os.path.join(os.path.dirname(__file__)+'/shoucang_item.json')json_str=json.dumps(json_list)withopen(self.path+os.sep+'shoucang_item.json','w')asf:f.write(json_str)#浏览足迹,导入爬取几个页面,默认三个页面https://shoucang.taobao.com/nodejs/item_collect_chunk.htm?ifAllTag=0&tab=0&tagId=&categoryCount=0&type=0&tagName=&categoryName=&needNav=false&startRow=60defget_footmark_item(self,page=3):url='https://www.taobao.com/markets/footmark/tbfoot'self.driver.get(url)pn=0item_num=0json_list=[]foriintrange(page):html_str=self.driver.page_sourceobj_list=etree.HTML(html_str).xpath('//div[@class="item-listJ_redsList"]/div')[item_num:]forobjinobj_list:item_num+=1item={}item['date']=''.join([i.strip()foriinobj.xpath('./@data-date')])item['url']=''。join([i.strip()foriinobj.xpath('./a/@href')])item['name']=''.join([i.strip()foriinobj.xpath('.//div[@class="title"]//text()')])item['price']=''.join([i.strip()foriinobj.xpath('.//div[@class="price-box"]//text()')])json_list.append(item)self.driver.execute_script('window.scrollTo(0,1000000)')#file_path=os.path.join(os.path.dirname(__file__)+'/footmark_item.json')json_str=json.dumps(json_list)withopen(self.path+os.sep+'footmark_item.json','w')asf:f.write(json_str)#地址defget_addr(self):url='https://member1.taobao.com/member/fresh/deliver_address.htm'self.driver.get(url)html_str=self.driver.page_sourceobj_list=etree.HTML(html_str).xpath('//tbody[@class="next-table-body"]/tr')data_list=[]forobjinobj_list:item={}item['name']=obj.xpath('.//td[1]//text()')item['area']=obj.xpath('.//td[2]//text()')item['detail_area']=obj.xpath('.//td[3]//text()')item['游变']=obj.xpath('.//td[4]//text()')item['手机']=obj.xpath('.//td[5]//text()')data_list.append(item)#file_path=os.path.join(os.path.dirname(__file__)+'/addr.json')json_str=json.dumps(data_list)withopen(self.path+os.sep+'address.json','w')asf:f.write(json_str)if__name__=='__main__':#passcookie_list=json.loads(open('taobao_cookies.json','r').read())t=TaobaoSpider(cookie_list)t.get_orders()#t.crawl_good_buy_data()#t.get_addr()#t.get_choucang_item()#t.get_footmark_item()这么优秀的仓库,请给仓库创建者star支持!