浏览器抓取网页(PYTHON的安装(已安装,可跳过此步骤))

优采云 发布时间: 2022-01-09 15:03

  浏览器抓取网页(PYTHON的安装(已安装,可跳过此步骤))

  (一)PYTHON安装(已经安装,可以跳过此步)

  1、PYTHON下载

  PYTHON官网:

  

  根据对应系统下载,这里是window系统,点击windows,根据自己系统的操作位数下载

  

  添加环境变量:

  

  如果没有添加,可以自己在电脑上添加

  

  (二)安装第三方库

  安装selenium和pyquery,cmd命令下输入pip install selenium(pyquery安装类似)

  

  如果报错,进入python目录下的scripts目录,然后输入命令

  

  如果python的IDLE下没有报错,说明安装成功

  

  (三)浏览器及对应浏览器驱动的安装

  这里主要使用chrome浏览器,去谷歌官网下载安装,安装后查看谷歌版本,点击关于谷歌浏览器

  (通常在这里找到)

  

  我的版本:67.0

  

  下载对应的webdriver(这里没有人推测每3个版本对应一个v65-67---v2.38,即v68-70--v2.39)

  下载链接:

  

  将下载好的chromedriver.exe解压,放到python36目录下(或者python36目录下的脚本)

  IDLE下执行以下代码,会自动打开你的谷歌浏览器(环境搭建)

  

  (四)详细示例代码

  需求:爬取股票网站信息((“好”或“坏”)和“相关股票”),点击加载更多

  

  (1)打开浏览器获取相关信息:

  

  

  (2)网页分析(selenium有很多定位方式,这里用的比较少)

  上述代码中,data已经拥有了网页当前页面的所有内容(可以输出观察);我们现在只需要从中获取我们想要的数据

  在网页中,右键,检查元素,(或检查)分析网页:(由于获取的数据可能与网页分析的数据不同,建议输出数据并分析正则表达式从数据)

  

  我们使用正则表达式查找所有以 1 开头并以 2 结尾的内容并使用 findall 函数

  

  实现点击:(点击后“好股”和“相关股”的规律会与首页不同(后期点击与第一次点击相同))

  定位方法如下:(用的比较少,这里就不详细介绍了,大家自己理解):

  当您知道元素的 id 属性时使用 find_element_by_id 。使用此策略,将返回 id 属性值与位置匹配的第一个元素。

  当您知道元素的名称属性时使用 find_element_by_name。使用此策略,将返回 id 属性值与位置匹配的第一个元素。

  find_element_by_xpath

  find_element_by_link_text

  find_element_by_partial_link_text

  find_element_by_tag_name

  find_element_by_class_name

  find_element_by_css_selector

  

  附上源代码:

  #coding=utf-8

from selenium import webdriver

import time

import re

from pyquery import PyQuery as pq

def openurl(url,num):

        browser  = webdriver.Chrome()  #打开浏览器

        browser.get(url)               #进入相关网站

        html=browser.page_source       #获取网站源码

        data=str(pq(html))             #str() 函数将对象转化为适于人阅读的形式。

                                                                                                              

        dic={}                         

        re_rule=r'(.*?)'       

        datalist=re.findall(re_rule,data,re.S)

        for i in range(0,len(datalist)):

                rule1=r'/img/icon-lihao.png(.*?)'

                bullish = re.findall(rule1,datalist[i],re.S)

                if len(bullish)==0:

                        rule1=r'/img/icon-likong.png(.*?)'

                        bullish = re.findall(rule1,datalist[i],re.S)

                        

                rule2=r'(.*?)'

                stock_name=re.findall(rule2,datalist[i], re.S)

                

                if len(stock_name) > 0 and len( bullish) > 0:

                        for c in range(0,len(stock_name)):

                                dic[stock_name[c]]= bullish[0]

                                print("正在爬取第",len(dic)+1,"个请稍等.....") 

              

        c=len(datalist)

        if len(dic) < num:

                while(1):

                        browser.find_element_by_class_name("home-news-footer").click()

                        time.sleep(1)

                        html=browser.page_source

                        data=str(pq(html))

                        datalist=re.findall(re_rule,data,re.S)

                        for i in range(c,len(datalist)):

                                rule3=r&#39;/img/icon-lihao.png(.*?)&#39;

                                bullish = re.findall(rule3,datalist[i],re.S)

                                if len(bullish)==0:

                                        rule5=r&#39;/img/icon-likong.png(.*?)&#39;

                                        bullish = re.findall(rule5,datalist[i],re.S)

                                rule4=r&#39;(.*?)&#39;

                                stock_name=re.findall(rule4,datalist[i], re.S)

                                                

                                if len(stock_name) > 0 and len( bullish) > 0:

                                        for c in range(0,len(stock_name)):

                                                dic[stock_name[c]]= bullish[0]

                                                

                            

                        c=len(datalist)

                        if len(dic) > num :

                                browser.quit()

                                print("爬取完毕!!")

                                break

                        print("正在爬取第",len(dic)+1,"个请稍等.....")   

        else:

                browser.quit()

                print("爬取完毕!!")

                

        return dic

                                                                         

url=&#39;https://www.xuangubao.cn/&#39;

dict=openurl(url,3)

print(dict)

#f=open("F:\\text.txt","a")

#for key,values in  dict.items():

        #f.write((key+"\t"))

        #print(key,values)

#f.close()     

  ---------------------

  原来的:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线