python - 阿里巴巴爬蟲源碼的應用疑惑
問題描述
1.目前問題:運行該py文件,沒有任何反應,請問是什么問題?2.純新手,沒接觸過py,只學完初淺的html+css。但由于公司一個項目需要搜集區域的供應商信息,想到了py爬蟲,便在一個科學怪咖的網站找到了一個爬取阿里巴巴的案例源碼3.根據案例所述,安裝好了py2.7.13、pip、selenium和火狐瀏覽器...4.聯系了作者僅需要修改淘寶賬號密碼及搜索頁面的url即可,但是沒反應,用的是作者在git上的源碼
5.難道是要等好久好久,還是哪里出了問題?網上關于此類的問題比較少,所以特請教下6.源碼如下:
#! /usr/bin/env python# coding:utf-8from selenium import webdriverfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.action_chains import ActionChainsimport timeimport urllibimport urllib2import sysimport osimport reimport csvimport numpy as np# 解決中文報錯的問題reload(sys)sys.setdefaultencoding(’utf-8’)# 打開一個火狐瀏覽器driver = webdriver.Firefox()# 睡眠3秒,防止瀏覽器還沒打開就進行了其他操作time.sleep(3)# 化工商戶頁面的urlurl = ’https://s.1688.com/company/company_search.htm?’ ’keywords=%BC%E0%BF%D8&city=%C9%EE%DB%DA&province=%B9%E3%B6%AB&n=y&filt=y’# 登錄的urllogin_url = ’https://login.1688.com/member/signin.htm?’# 跳轉到登錄頁面driver.get(login_url)# 睡眠5秒,防止網速較差打不開網頁就進行了其他操作time.sleep(5)# 找到賬號登錄框的DOM節點,并且在該節點內輸入賬號driver.find_element_by_name('TPL_username').send_keys(’’)# 找到賬號密碼框的DOM節點,并且在該節點內輸入密碼driver.find_element_by_name('TPL_password').send_keys(’’)# 找到賬號登錄框的提交按鈕,并且點擊提交driver.find_element_by_name('TPL_password').send_keys(Keys.ENTER)# 睡眠5秒,防止未登錄就進行了其他操作time.sleep(5)# 跳轉到化工商戶頁面的urldriver.get(url)# 新建一個data.csv文件,并且將數據保存到csv中csvfile = file(’data.csv’, ’web’)writer = csv.writer(csvfile)# 寫入標題,我們采集企業名稱,主頁,產品,聯系人,電話和地址信息writer.writerow(( u’企業名稱’.encode(’gbk’), u’主頁’.encode(’gbk’), u’產品’.encode(’gbk’), u’聯系人’.encode(’gbk’), u’電話’.encode(’gbk’), u’地址’.encode(’gbk’)))# 構建agents防止反爬蟲user_agents = [ ’Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11’, ’Opera/9.25 (Windows NT 5.1; U; en)’, ’Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;.NET CLR 1.1.4322; .NET CLR2.0.50727)’, ’Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5(like Gecko) (Kubuntu)’, ’Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.12) Gecko/20070731 Ubuntu/dapper-security Firefox/1.5.0.12’, ’Lynx/2.8.5rel.1 libwww-FM/2.14 SSL-MM/1.4.1 GNUTLS/1.2.9’, 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Ubuntu/11.04 Chromium/16.0.912.77 Chrome/16.0.912.77 Safari/535.7', 'Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:10.0) Gecko/20100101 Firefox/10.0 ',]# 總共有100頁,使用for循環采集for page in xrange(1, 100): # 捕捉異常 try:# 獲取企業名稱列表title = driver.find_elements_by_css_selector('a[class=list-item-title-text]')# 獲取產品product = driver.find_elements_by_xpath('//p[@class='list-item-detail']/p[1]/p[1]/a[1]')# 打印長度,調試print len(title)# 定義正則匹配每條商戶pattern = re.compile(’<p class='contcat-desc'.*?>(.*?)</p>’, re.S)# 定義電話正則tel_pattern = re.compile(’<dd>(.*?)</dd>’, re.S)# 定義移動電話正則member_name_pattern = re.compile(’<a.*?class='membername'.*?>(.*?)</a>’, re.S)# 定義地址正則address_pattern = re.compile(’'address'>(.*?)</dd>’, re.S)for i in xrange(len(title)): # 獲取標題的值 title_value = title[i].get_attribute(’title’) # 獲取跳轉的url href_value = title[i].get_attribute(’href’) + ’page/contactinfo.htm’ # 獲取經營范圍 product_value = product[i].text # 隨機選擇agent進行訪問 agent = np.random.choice(user_agents) # 組建header頭部 headers = {’User-Agent’: agent, ’Accept’: ’*/*’, ’Referer’: ’http://www.google.com’} # 使用urllib2進行Request request = urllib2.Request(href_value, headers=headers) # 訪問鏈接 response = urllib2.urlopen(request) # 獲得網頁源碼 html = response.read() # 進行信息匹配 info = re.findall(pattern, html) try:info = info[0] except Exception, e:continue tel = re.findall(tel_pattern, info) try:tel = tel[0]tel = tel.strip()tel = tel.replace(’ ’, ’-’) except Exception, e:continue member_name = re.findall(member_name_pattern, html) try:member_name = member_name[0]member_name = member_name.strip() except Exception, e:continue address = re.findall(address_pattern, html) try:address = address[0]address = address.strip() except Exception, e:address = ’’ # 打印出信息,方便查看進度 print ’tel:’ + tel print ’member_name:’ + member_name data = (title_value.encode(’gbk’, ’ignore’),title[i].get_attribute(’href’),product_value.encode(’gbk’, ’ignore’),member_name,tel,address ) writer.writerow(data)js = ’var q=document.documentElement.scrollTop=30000’driver.execute_script(js)time.sleep(1)page = driver.find_elements_by_css_selector('a[class=page-next]')page = page[0]page.click()time.sleep(2) except Exception, e:print ’error’continue# 關閉csvcsvfile.close()# 關閉模擬瀏覽器driver.close()
問題解答
回答1:前提你你裝好python之后配置好python的環境變量,也就說你在cmd命令行可以運行python命然后進到py文件所在目錄,執行
python -u alibaba.py
相關文章:
