import urllib
import urllib2
import HTMLParser
from bs4 import BeautifulSoup
import re
import MySQLdb as mdb
import json
i=1 #number order of companys
def GetOnePageUrl(url):
global i
flag = 0
request = urllib2.Request(url)
html = urllib2.urlopen(request)
soup = BeautifulSoup(html, "lxml")
for link in soup.find_all(name='a', attrs={"href": re.compile(r'^http://qy.58.com/mq/[0-9]*/$')}):
#print link.get('href')
if flag%2 == 0:
GetOneUrlInfo(link.get('href'))
print i
i += 1
flag += 1
def GetOneUrlInfo(url):
global i
request = urllib2.Request(url)
html = urllib2.urlopen(request)
soup = BeautifulSoup(html,"lxml")
#for addr in soup.find_all(name='td',limit=5):
# print addr.string
fiveinfo = soup.find_all(name='td',limit=5)
if len(fiveinfo) == 0: #the company's link go to website which made by itself
return
co_name = fiveinfo[0].string
co_type = fiveinfo[1].string
co_numpeople = fiveinfo[2].string
co_manager= fiveinfo[4].string
co_tel_addr = "/tmp/pic/" + str(i) + "tel.gif"
co_email_addr = "/tmp/pic/" + str(i) + "email.gif"
co_connect_all = soup.find_all(name='a', attrs={"href": re.compile(r'^http://[\s\S]*.5858.com$')})
if len(co_connect_all) != 0:
co_connect = co_connect_all[0].get('href')
else:
co_connect = "the link is not formative" #company's link isn't formative
#mysql
conn = mdb.connect(host='127.0.0.1',port=3306,user='root', passwd='password',db='co58',charset='utf8')
cursor = conn.cursor()
cursor.execute("insert into 58co values('%d','%s','%s','%s','%s','%s','%s','%s')"%(i,co_name,co_type,co_numpeople,co_manager,co_tel_addr,co_email_addr,co_connect))
cursor.close()
conn.commit()
conn.close()
#save images
strtel = 'tel'
stremail = 'email'
flag = 0
for link in soup.find_all(name='img', attrs={"src": re.compile(r'^http://image.58.com/showphone.aspx.[\s\S]*')}):
#print link.get('src')
if flag == 0:
f = open(str(i)+strtel+'.gif','wb')
flag += 1
else:
f = open(str(i)+stremail+'.gif','wb')
flag -=1
#f = open(str(i)+'.gif','wb')
req = urllib2.urlopen(link.get('src'))
buf = req.read()
f.write(buf)
#there are ten pages
j = 1
while j <= 10:
url = 'http://nj.58.com/yewu/pn' + str(j) + '/?jobfrom=mingqi'
GetOnePageUrl(url)
j += 1
在ubuntu 16.04 lts 下,python2.7, MySQL 5.7,编辑器sublime text 3
安装的开发环境废了好长时间,python的包安装也麻烦,之前在win7 64位系统中安装mysqldb包一直没装上,后来在别的电脑上试了一下,mysqlconnect啥的包可以替代,好像说是正统的包
用的beautif soup包,连接mysql也弄了半天,导出到excel也是用的第三方软件,直接导出到excel好像安全方面有点问题
因为58上企业电话号码和邮箱地址是以图片形式给出的,所以就把图片下载到本地
两种解决方案:
1、图片直接放入excel对应行,但是好像不怎么好搞,把本地图片的超链接存入对应单元格还是没问题的,但是查看的时候还要点击链接才能打开图片不方便,用宏的话录制脚本又达不到要求
2、就是识别图片中号码和邮箱地址,这个工程量感觉不小,感觉要使用机器学习方面的知识
找了个第三方软件中文名好像叫“泰比”的俄罗斯软件,识别效果很好,就是不知道批量识别速度如何,关键这软件不便宜。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
更新
添加爬取公司地址
addr = soup.find_all(name = 'span')
co_addr = addr[18].string
mysql插入语句也要修改,就不赘述了
下面来说一个mysql中表导出为excel表格的问题,当然在ubuntu中是LibreOffice Calc这个软件,文件后缀是ods,不过显然不要紧
1、首先在控制台进入mysql
2、选中想导出的数据库
3、执行检查安全设置语句
show variables like '%secure%';
我的是secure_file_priv /var/lib/mysql-files/
意思你想导出文件只能导出到这个指定的目录下
4、导出到上述指定的目录中
比如:
select * from tablename into outfile ’/var/lib/mysql-files/filename.xls‘;
这时控制台会显示:query ok, 多少多少rows affected
说明文件已经导出到了/var/lib/mysql-files目录下了
但是你直接去找会发现你居然看不了!!!说你没有权限!!!WTF!!!电脑不是买的吗?系统不是我装的吗?我难道还没有权限?一万只草泥马奔腾。。。
别砸电脑,毕竟不是别人的日系车。。。看下面
5、控制台退出mysql,键入下面语句,并输入你的密码
sudo nautilus
权限瞬间提升五个等级。。。以前只是神盾局小探员的等级,现在就是独眼局长的权限
然后再查看就ok了
PS:不过我发现我想直接把导出文件拖到桌面还是不行。。。只好打开另存到桌面。。。
不过最后删除的时候到时很顺手就删了。。。