python爬虫--信息爬取、数据挖掘
基于真实环境下的数据爬取和结构化存储
存储使用的是mysql数据库
建议:在进行数据爬取时,获取的数据并不是结构化数据的情况下,建议使用字典来进行结构化处理。
第一步:获取目标网页的所有数据,并进行结构化处理,这里使用字典html_a来进行存储,注意html_a["bs"]用来表示某一条信息的状态
1 html_txt = self.Geturl(url) 2 html_xpath = etree.HTML(html_txt) 3 html_tr = html_xpath.xpath('//div[@class="info_con"]') 4 for tr in html_tr: 5 html_a_title = tr.xpath('//tr/td[1]/a/@title') 6 html_a_href = tr.xpath('//tr/td[1]/a/@href') 7 html_td = tr.xpath('//tr/td[2]/text()') 8 html_td_a = html_td[4:] 9 10 for a in range(0,len(html_a_title)): 11 html_a = { 12 "title":"", 13 "time":"", 14 "url":"", 15 "bs":"0" 16 } 17 html_a["title"] = html_a_title[a] 18 html_a["time"] = html_td_a[a] 19 html_a["url"] = ''.join([url_a,html_a_href[a]]) 20 Class_A.append(html_a)
第二步:查询数据库的数据,用作去重,数以sql语句的使用,注意:python调用sql语言查询后键数据获取到的步骤。
1 cursor.execute('SELECT title FROM octopus_basis WHERE title IN (SELECT title FROM octopus_basis WHERE type = "1" AND uptime LIKE %s)',(Time_p)); 2 sqlnum = cursor.fetchall() 3 for x in sqlnum: 4 ggmc.append(x[0])
第三步:更改标识,将标识进行改变,用以区分有效数据及无效数据
1 for C in ggmc: 2 for B in Class_A: 3 if B["bs"] == '1' and B["title"] == C: 4 B["bs"] ='0'
拿到最后的有效数据后,就可以根据有效数据内所包含的网址,针对有效信息网址做爬取。
数据的爬取这里采用了xpath语法,不会的小伙伴自行百度
1 html_one = html_xpath.xpath('//div[@id="htmlTable"]/table[@class="table_one"]//tr/td') 2 text_one = [] 3 for index in html_one: 4 infot_x = index.xpath('string(.)').strip() 5 text_one.append(infot_x)
对于获取到的信息被分割,使用join()方法连接
1 html_twotr_10 = html_xpath.xpath('//div[@id="htmlTable"]/table[@class="table_two"]//tr[10]/td[@colspan="4"]/text()') 2 tlgcjy = '' 3 for c in html_twotr_10: 4 tlgcjy = ''.join([tlgcjy,c])
获取完数据就是最后的上传了
这里用到的是mysql数据库
数据上传之前需要先查询数据库的idMax,防止数据混乱
1 try: 2 cursor.execute('select max(id) id from xxxxxxxs') 3 sqlnum = cursor.fetchone() 4 idMax = sqlnum[0] + 1 5 except TypeError: 6 idMax = 1
查询完就是sql语句按部就班上传数据了
拜拜,下次见