今天我们通过一个例子来介绍python爬取数据的一般步骤,用到的工具包括python的经典模块requests和BeautifulSoup,另外结合刚学习的任务流工具TaskFlow来完成代码开发。 我们先来看一下要爬取的数据,网址是http:data。10jqka。com。cnfundsgnzjl,通过chrome的开发者工具分析我们可以比较容易找到后台数据加载网址为 http:data。10jqka。com。cnfundsgnzjlfieldtradezdforderdescpage{pagenum}ajax1free1 其中pagenum的位置为要查询第几页的数据,在网页上看到概念一共有6页数据,所以pagenum取值为16 图示1 这里有个小技巧,可以先点击图示1左上角的清空按钮,把已经加载的网址先清理掉,然后在原始网页上点第二页,就能看到图片左下角新加载的网址,点开右边Preview看到资金流数据相关的内容,就能确定这个网址是用来加载数据的。 在chrome浏览器中输入http:data。10jqka。com。cnfundsgnzjlfieldtradezdforderdescpage1ajax1free1,并打开chrome开发者工具,在网页源码中找到数据所在table标签为 。。。 lt;tableclassmtablegt;lt;tablegt; 抓取数据的完整源码如下 importtimeimportrequestsfrombs4importBeautifulSoupfromtaskflowimportenginesfromtaskflow。patternsimportlinearflowfromtaskflow。taskimportTaskREQUESTHEADER{UserAgent:Mozilla5。0(Macintosh;IntelMacOSX10142)AppleWebKit537。36(KHTML,likeGecko)Chrome78。0。3904。97Safari537。36}classMoneyFlowDownload(Task):下载资金流数据数据源地址:http:data。10jqka。com。cnfundsgnzjlBASEURl{concept:http:data。10jqka。com。cnfundsgnzjlfieldtradezdforderdescpagesajax1free1,}defexecute(self,bizdate,args,kwargs):forname,baseurlinself。BASEURl。items():爬取数据的存储路径dtpathdatass。csv(bizdate,name)withopen(dtpath,a)asf:记录数据文件的当前位置posf。tell()f。seek(0)linesf。readlines()读取文件中的全部数据并将第一列存储下来作为去重依据,防止爬虫意外中断后重启程序时,重复写入相同crawledlistlist(map(lambdaline:line。split(,)〔0〕,lines))f。seek(pos)循环500次,从第一页开始爬取数据,当页面没有数据时终端退出循环foriinrange(1,500):print(startcrawls,s(name,baseurli))websourcerequests。get(baseurli,headersREQUESTHEADER)soupBeautifulSoup(websource。content。decode(gbk),lxml)tablesoup。select(。Jajaxtable)〔0〕tbodytable。select(tbodytr)当tbody为空时,则说明当前页已经没有数据了,此时终止循环iflen(tbody)0:breakfortrintbody:fieldstr。select(td)将每行记录第一列去掉,第一列为序号,没有存储必要record〔field。text。strip()forfieldinfields〔1:〕〕如果记录还没有写入文件中,则执行写入操作,否则跳过这行写入ifrecord〔0〕notincrawledlist:f。writelines(〔,。join(record)〕)同花顺网站有反爬虫的机制,爬取速度过快很可能被封time。sleep(1)ifnamemain:bizdate20200214tasks〔MoneyFlowDownload(moneyflowdatadownload)〕flowlinearflow。Flow(thsdatadownload)。add(tasks)eengines。load(flow,store{bizdate:bizdate})e。run() 执行程序后,在dtpath位置已经存储了概念的资金流数据,文件名为20200214concept。csv,内容大致如下: 钛白粉,1008。88,6。29,7。68,6。21,1。47,7,金浦钛业,10。04,2。96磷化工,916。833,2。42,37。53,34。78,2。75,28,六国化工,9。97,4。08光刻胶,1435。68,2。40,43。51,44。31,0。80,20,晶瑞股份,10。01,42。99 此时就完成了同花顺概念分类的资金流数据的爬取,之后可以每天定时启动任务抓取数据进行分析。