[ケーススタディ]淘宝網の店やレビューをクロールのPython Pythonの爬虫類

開発するのに必要ないくつかのライブラリをインストールします。

(1)ドライバインストールのmysql:Windowsのオープンプレス勝利で+は、CMDコマンドライン入力をR、コマンド入力は、pymysqlをインストール入るPIP。

自動テスト駆動セレンの(2)インストール:PIPコマンドラインでセレン入力をインストールしてください。

PIP入力したコマンドライン上pyquery入力をインストールします(3)ライブラリpyqueryを解析するラベルをインストールします。

\ Anaconda3 \アナコンダ:(4)アナコンダは、パスEに追加し、インストール後に環境変数を設定し、アナコンダをダウンロードし、オープンソースのPython condaが含まれているリリース、Pythonと180以上の科学的なパッケージとその依存関係であるに言及します環境変数を有効にするには、jiebaライブラリをインストールし、PIPのコマンドラインを入力しjiebaインストール入力するように、\ライブラリ\ビンは、コンピュータを再起動します。

:(5)ChromeDriver、公式サイトでダウンロードhttp://chromedriver.storage.googleapis.com/を

Pythonのスクリプトフォルダのインストールディレクトリに置かれたindex.html、およびchromedriver.exe。

実現

  • データのためのクロールは、主Pyquery、セレンライブラリで使用され、次のコードは、主に、淘宝網の検索を実現反転し、データを抽出します。
'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
# 设置网站最大响应时间
wait=WebDriverWait(driver,50)
class TaoBaoSearch:
# 初始化,默认搜索为None,创建数据库连接
    def __init__(self,search=None):
        self.name=search
        self.mysql=to.Data_oper()
# 对淘宝网的搜索
    def search(self):
# 设置源网站,这里设置淘宝网站为源网站
        driver.get("https://www.taobao.com/")#J_TSearchForm > div.search-button > button
# “q”为淘宝首页输入框的标签,这里定位到该输入框,并设置要搜索商品的名字
        imput=driver.find_element_by_id("q")
        imput.send_keys(self.name)
# wait.until()该方法的作用是加载出来搜索结果总页数之后开始往下执行
        pageText=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#mainsrp-pager > div > div > div > div.total")))
        total=re.search("\d+",pageText.text)
# 该方法返回搜索结果的总页数
        return total.group(0)
# 提取出相应的数据
    def parseHtml(self):
        html=driver.page_source#获取网页源代码
        doc=qp(html)
# 得到到class为m-itemlist下面的class是.items .item的div
        iteams=doc(".m-itemlist .items .item").items()
# 根据标签选择器提取出需要的数据
        for item in iteams:
            # src=item(".pic .img").attr("src")
            src=item(".row .J_ClickStat").attr("href")  # 该店铺的链接
            person=item(".row .deal-cnt").text()    #购买该商品的人数
            title=item(".row .J_ClickStat").text().split("\n")  # 标题
            shop=item(".row .shopname").text()  # 商品
            location=item(".row .location").text()  # 地区
       # 将提取到的数据放到数组中保存起来
            data=[]
            data.append(str(title[0].strip()))
            data.append(str(shop.strip()))
            data.append(str(location.strip()))
       # 剔除无用字
            data.append(str(person[:-3].strip()))
            data.append(str(src).strip())
# 调用mysql.insert_data()方法将提取到的数据插入到数据库中
            self.mysql.insert_data(data)
#  对网页进行翻页的方法
    def nextpage(self,pagenumber):
# 定位到翻页的按钮前的输入框,也就是对其进行跳转
        pageInput=driver.find_element_by_css_selector("#mainsrp-pager > div > div > div > div.form > input")
        pageInput.clear()
        pageInput.send_keys(pagenumber)
# 定位到跳转按钮,对其进行翻页
        pageButton=driver.find_element_by_css_selector("#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit")
        pageButton.click()
        wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,"#mainsrp-pager > div > div > div > ul > li.item.active > span"),str(pagenumber)))
        self.parseHtml()
# 定义主函数,调用上面的的方法
    def main(self):
        total=int(self.search())
        for i in range(2,total):
            self.nextpage(i)
        self.mysql.close()

次のコードは、その主な役割は、画面に表示されるデータの行数は、主要なアイデアがどのようになる、ソートアルゴリズムである:ユーザー入力がデータベースを読み取ることにより得られたデータのデジタルアレイを作成するために、後で孤立の数とは、int型に変換しましたデータアレイ、ユーザが行の最大数に等しい長さを表示したい配列に追加されるたびに、そのデータアレイのために、データを読み出した後ため、その後、各時間を減少させます小さなは、スキップされ、それ以外の場合は、データの挿入、前のデータの最小および削除、最後の配列を保存するには購入前n個のデータの最大数がある場合に比べて、配列の最小は、比較されます。

次のようにメインのコードは次のようになります。

'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
#对数据进行排序,data为购买人数
def shot_data(self,data,i=10):    # i为用户想要显示的最大行数,默认为10行
    top=[]
    if i>len(data):
        i=len(data)
    for x in data:
        if len(top)<i:     # 控制数组的长度,另其大小等于i
            top.append(x)
            if len(top)==i:
                top.sort(reverse=True)        # 数组内的数据进行排序
        else:
            l=len(top)
            y=len(top)
            t=1
            if x>top[l-1]:    # 判断其数值是否大于数组内的最小值
                while x>top[l-t] and y>0:    # 控制循环条件
                    t+=1
                    y-=1
                if y!=0:    # y的值若是==0,那么该数值就是最大值
                    for c in range(1,t):
                        top[l-c]=top[l-c-1]
                    top[l-t+1]=x
                else:
                   for c in range(1,t):
                       top[l-c]=top[l-c-1]
                   top[0]=x
    return top    # 返回装有最大的前i个数的数组

次のコードは、コメントにキーワードを抽出して、我々はいくつかの方法のjiebaライブラリを使用しています。
次のようにメインのコードは次のようになります。

def dis_an(self):
# 清空显示界面
    self.txtMess.delete(1.0,END)
    t=to.Data_oper()
# 得到数据库中的存储信息
    test=t.dis_only_discuss()
# 定义字符串adg,v
    adg=""
    v=""
# 对评论进行分割并标注词性
    word=psg.cut(test)
# w为词意,f为词性
    for w,f in word:
    # 判断词性是否为形容词
        if f.startswith('a'):
            print(w)
            adg=adg+","+w
    # 判断词性是否为动词
        elif f.startswith('v'):
            v=v+","+w
    # 根据该词的权重提取出前5个词
tags=jieba.analyse.extract_tags(adg,topK=5)
    tags1=jieba.analyse.extract_tags(v,topK=5)

おすすめ

転載: www.cnblogs.com/Pythonmiss/p/11298086.html