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语句按部就班上传数据了

拜拜,下次见

posted @ 2020-12-11 09:16  Jack船长1  阅读(323)  评论(0编辑  收藏  举报