python - 阿里巴巴爬蟲源碼的應用疑惑
阿神
阿神 2017-06-22 11:51:27
0
1
1832

1.目前問題:運行該py文件,沒有任何反應,請問是什麼問題?
2.純新手,沒接觸過py,只學完初淺的html css。但由於公司一個專案需要蒐集區域的供應商信息,想到了py爬蟲,便在一個科學怪咖的網站找到了一個爬取阿里巴巴的案例源碼
3.根據案例所述,安裝好了py2 .7.13、pip、selenium和火狐瀏覽器...

#4.聯絡了作者僅需要修改淘寶帳號密碼及搜尋頁面的url即可,但是沒反應,用的是作者在git上的源碼

5.難道是要等好久好久,還是哪裡出了問題?網路上關於此類的問題比較少,所以特請教下
6.源碼如下:

#! /usr/bin/env python
# coding:utf-8

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import time
import urllib
import urllib2
import sys
import os
import re
import csv
import numpy as np

# 解决中文报错的问题
reload(sys)
sys.setdefaultencoding('utf-8')
# 打开一个火狐浏览器
driver = webdriver.Firefox()
# 睡眠3秒,防止浏览器还没打开就进行了其他操作
time.sleep(3)
# 化工商户页面的url
url = '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'
# 登录的url
login_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)
# 跳转到化工商户页面的url
driver.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
# 关闭csv
csvfile.close()
# 关闭模拟浏览器
driver.close()
阿神
阿神

闭关修行中......

全部回覆(1)
黄舟

前提你你裝好python之後配置好python的環境變量,也就說你在cmd命令行可以運行python命
然後進到py文件所在目錄,執行

python -u alibaba.py
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!