selenium+beautifulsoup数据爬取

这篇具有很好参考价值的文章主要介绍了selenium+beautifulsoup数据爬取。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

## 准备工作

### 1、安装selenium

```

pip install selenium

```

### 2、安装浏览器driver(以Edge浏览器为例)  

* 打开edge浏览器,然后“帮助和反馈”->“关于Microsoft Edge”,查看浏览器版本,根据版本号下载driver      

![Micro.png](https://tva1.sinaimg.cn/large/005T39qaly1h3g2mw4k5gj30qo0ba41d.jpg)

* 打开网站[url](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/) ,根据浏览器版本下载对应的driver      

![list.png](https://tva1.sinaimg.cn/large/005T39qaly1h3g2u536mxj311y0hd41x.jpg)

* 将下载的driver解压后放在爬虫脚本同级目录下

![目录.png](https://tva1.sinaimg.cn/large/005T39qaly1h3g2wl9hwvj308h09wta1.jpg)

### 3、需要安装的其他库

```

# 网络连接的库

pip install requests

# 处理标签数据的库

pip install beautifulsoup4

# 处理excel写入的库

pip install xlwt

```

### 4、分析网页和信息处理逻辑

#### 分析网页

* 要爬取网页是[研招网官网硕士专业目录](https://yz.chsi.com.cn/zsml/queryAction.do),如下图所示。        

![要爬取的页面.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i0o5p6i9j311y0hddjc.jpg)

* 可以看到信息主要是五个查询字段,分别是招生单位、所在地、研究生院、自划线院校、博士点,和两个必选字段分别是专业门类和专业领域。必须选择专业门类和专业领域才能进行查询。        

![门类.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i0uo3xl4j311y0hdq6m.jpg)

* 打开页面的检查页面,可以看到很多个jsp的请求,getMI.jsp是学科门类下拉列表的数据,getZy.jsp是专业领域下拉列表的数据,getSs.jsp是所在地的数据。              

![action.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i4s3bpfwj311y0hdk4i.jpg)

* 同时,网页数据还进行了分页处理,所以在爬取数据的时候也需要考虑到这一点。      

![分页.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i4vhv5lhj311y0hdju5.jpg)

#### 处理思路

经过对网页的简单的分析,需要先选中“学科门类”和“专业领域”,然后点击“查询”按钮,最后不断点击下一页按钮来获取网页源代码,在通过beautifulsoup对网页源代码进行信息提取,最后将提取的信息写入excel。

## 编写代码

### 方法解析

#### getMajor()方法

```python

def getMajor():

    url_1 = "https://yz.chsi.com.cn/zsml/pages/getMl.jsp"

    url_2 = "https://yz.chsi.com.cn/zsml/pages/getZy.jsp"

    headers = {

        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',

        'Connection': 'close'}  # CLOSE: 在header中不使用持久连接

    # 查询期刊名称及其他信息

    print("------------开始爬取-----------")

    # response = requests.post(url, headers=headers, data=payload, cookies=cookie)

    response = requests.post(url_1, headers=headers)

    result = response.json()

    zyxw = {'mc':'专业学位','dm':'zyxw'}

    result.insert(0,zyxw)

    datas = []

    payload = {

        'mldm': '01'

    }

    for item in result:

        payload['mldm'] = item['dm']

        response = requests.post(url_2, headers=headers, data=payload)

        data = response.json()

        datas.append(data)

    return result,datas

```

* 这个方法主要就是获取网页中两个下拉框的数据,根据分析网页得知这两个数据都是通过两个jsp拿到的

* 值得注意的是直接获取第一个下拉框的数据(也就是https://yz.chsi.com.cn/zsml/pages/getMl.jsp),是没有专业硕士这一项的,所以我们这里手动加入并把它插入到result的第一项(因为在下拉项的第一项也是专业硕士)。    

![第一项下拉项.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i5i9d4fxj311y0hdq87.jpg)

* 不同门类下的专业领域数据需要传入参数才能获取,这里需要传入的payload中‘mldm’属性,这项属性也就是门类数据中的‘dm’属性,所以我们这里根据门类数据中的‘dm’属性分别获取每个门类下的不同专业领域信息。      

![数据类型.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i5q8ny20j30zy03ygnw.jpg)

#### find_page()方法

```python

def find_page(data_first,data_second):

    options = webdriver.ChromeOptions()

    # 解决DevToolsActivePort文件不存在的报错

    options.add_argument('--no-sandbox')

    # 指定浏览器分辨率

    options.add_argument('window-size=1600x900')

    # 谷歌文档提到需要加上这个属性来规避bug

    options.add_argument('--disable-gpu')

    # 隐藏滚动条, 应对一些特殊页面

    options.add_argument('--hide-scrollbars')

    # 不加载图片, 提升速度

    options.add_argument('blink-settings=imagesEnabled=false')

    # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败

    options.add_argument('--headless')

    # 初始化一个driver,driver的路径选择的是相对路径,不行就写绝对路径

    # edge

    driver = webdriver.Edge()

    # chrome

    # driver = webdriver.Chrome()


 

    # 网页主页面请求路径

    url = "https://yz.chsi.com.cn/zsml/queryAction.do"

    driver.get(url)


 

    # 学科门类

    s1_len = len(data_first)

    print(s1_len)

    allData = []

    for i in range(s1_len+1):

        # 给出加载时间

        time.sleep(1)

        s1 = Select(driver.find_element_by_name("mldm"))

        if i == 0:

            continue

        s1.select_by_index(i)

        name_one = data_first[i-1]['mc']

        # 学科类别

        s2_len = len(data_second[i-1])

        print(s2_len)

        pageData = []

        name_list = data_second[i-1]

        for j in range(s2_len+1):

            s2 = Select(driver.find_element_by_name("yjxkdm"))

            if j == 0:

                continue

            s2.select_by_index(j)

            print(i,j)

            name_two = data_second[i-1][j-1]['mc']

            # 查询按钮

            s3 = driver.find_element_by_name("button")

            s3.click()

            tablename = name_one + '-' + name_two

            print(tablename)

            pages = []

            # 跳页

            for l in range(50):

                currentPage = driver.page_source

                pages.append(currentPage)

                # 下一页

                s4 = driver.find_elements_by_class_name("lip")

                # 是否存在box直接跳页

                s5 = driver.find_elements_by_class_name("lip-input-box")

                time.sleep(1)

                if len(s5) == 0:

                    s4[-1].click()

                else:

                    s4[-2].click()

                nextPage = driver.page_source

                # 当前页和下一页一致跳出循环

                if nextPage == currentPage:

                    break

            pageData.append(pages)

        allData.append(pageData)

    # 将html交给beautifulsoup,每个大类

    getPage(allData,data_first,data_second)


 

    # 退出浏览器

    driver.close()

    driver.quit()

```

* 这个方法主要是通过selenium库模拟网页的操作,获取网页源代码然后将这些网页源代码交给beautifulsoup库处理,从而提取数据。

* 首先,我们查看网页源代码,发现两个下拉选择框的name属性分别是mldm和yjxkdm,查询按钮的name属性是button;获取这些元素对象进行模拟选择和查询。

![源代码-1.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i65banq4j311y0hdalt.jpg)

* 值得注意的点是这里遍历的遍历是从1开始且结束于len+1的,这是因为网页中下拉选项中的第一项是提示文字,并不能查询到实际的信息。    

![选择门类.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i6axm0mkj311y0hddld.jpg)

* 另一个值得注意的点是跳页的问题,我们找到下一页的按钮,对它进行模拟点击,这里我们循环了50次,这里为什么是50次?因为每页有30条数据,所以总体的数据大概有1500,而全国招收硕士的院校有863个,所以这个冗余是完全足够的。      

![研究生招生高校.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i6q49f5ej311y0hdjwo.jpg)  

* 跳出循环的语句如下,逻辑是“当前页和下一页一致跳出循环”就说明已经到最后一页啦,就跳出循环,避免无效点击。

```python

# 当前页和下一页一致跳出循环

if nextPage == currentPage:

    break

```

#### getPage()方法

```python

# name_one为表名,name_two为子表名

def getPage(allData,data_first,data_second):

    all_data = []

    t = -1

    for pageData in allData:

        t = t + 1

        l = -1

        for pages in pageData:

            l = l + 1

            for page in pages:

                # 解析源代码

                soup = BeautifulSoup(page, 'html.parser')

                tbody = soup.find('tbody')

                # print(tbody)

                for item in tbody.children:

                    if isinstance(item, bs4.element.Tag):

                        k = 0

                        tdItem = []

                        tdItem.append(data_first[t]['mc'])

                        tdItem.append(data_second[t][l]['dm']+data_second[t][l]['mc'])

                        for td in item.children:

                            if isinstance(td, bs4.element.Tag):

                                if k == 0 or k == 1:

                                    s = td.text.replace("\n","")

                                    tdItem.append(s)

                                else:

                                    ii = td.find('i')

                                    if ii:

                                        tdItem.append('√')

                                    else:

                                        tdItem.append('×')

                                k = k + 1

                        all_data.append(tdItem)

    write_excel(all_data)

```

* 这个方法是将获取的所有源代码交给beautifulsoup进行处理,获取我们需要的信息。

* 下面的图是部分源码的信息,可以看到所有信息都在tbody标签下的tr标签下,对于前两项(招生单位和所在地)自己获取标签的文本信息,对于后三项我们采用找“i”标签的方式来获取信息,如果存在“i”标签,我们标记信息为“√”,否则标记为“错”。

![源码-2.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i70v2fndj30yi0bxtgc.jpg)

* 此外,还需要将选择的属性值拼接到数据中,以实现较好地写入excel中。

```python

tdItem.append(data_first[t]['mc'])

tdItem.append(data_second[t][l]['dm']+data_second[t][l]['mc'])

```

#### write_excel()方法

```python

def write_excel(datas):

    workbook = xlwt.Workbook(encoding='utf-8')

    booksheet = workbook.add_sheet("学科门类", cell_overwrite_ok=False)

    # 添加表头

    booksheet.write(0, 0, "学科门类")

    booksheet.write(0, 1, "学科专业")

    booksheet.write(0, 2, "招生单位")

    booksheet.write(0, 3, "所在地")

    booksheet.write(0, 4, "是否有研究生院")

    booksheet.write(0, 5, "是否是自划线院校")

    booksheet.write(0, 6, "是否有博士点")

    for i, row in enumerate(datas):

        for j, col in enumerate(row):

            booksheet.write(i + 1, j, col)

    workbook.save('E:\\dataSet\\' + "数据" + '.xls')

```

* 这个方法比较简单,将获取到的数据写入excel中,先写表头信息,然后写入数据,保存到excel里面

### 全代码展示

#### 1、根据专业门类和专业领域写入多个excel文件

```python

#!/opt/python39/bin/python3

# encoding=utf-8

import time

from selenium import webdriver

import xlwt

from bs4 import BeautifulSoup

import bs4

import requests

# 创建chrome参数对象

from selenium.webdriver.support.select import Select

def find_page(data_first,data_second):

    options = webdriver.ChromeOptions()

    # 解决DevToolsActivePort文件不存在的报错

    options.add_argument('--no-sandbox')

    # 指定浏览器分辨率

    options.add_argument('window-size=1600x900')

    # 谷歌文档提到需要加上这个属性来规避bug

    options.add_argument('--disable-gpu')

    # 隐藏滚动条, 应对一些特殊页面

    options.add_argument('--hide-scrollbars')

    # 不加载图片, 提升速度

    options.add_argument('blink-settings=imagesEnabled=false')

    # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败

    options.add_argument('--headless')

    # 初始化一个driver,driver的路径选择的是相对路径,不行就写绝对路径

    # edge

    driver = webdriver.Edge()

    # chrome

    # driver = webdriver.Chrome()


 

    # 网页主页面请求路径

    url = "https://yz.chsi.com.cn/zsml/queryAction.do"

    driver.get(url)


 

    # 学科门类

    s1_len = len(data_first)

    print(s1_len)

    for i in range(s1_len+1):

        # 给出加载时间

        time.sleep(1)

        s1 = Select(driver.find_element_by_name("mldm"))

        if i <= 4:

            continue

        s1.select_by_index(i)

        name_one = data_first[i-1]['mc']

        # 学科类别

        s2_len = len(data_second[i-1])

        print(s2_len)

        pageData = []

        name_list = data_second[i-1]

        for j in range(s2_len+1):

            s2 = Select(driver.find_element_by_name("yjxkdm"))

            if j == 0:

                continue

            s2.select_by_index(j)

            print(i,j)

            name_two = data_second[i-1][j-1]['mc']

            # 查询按钮

            s3 = driver.find_element_by_name("button")

            s3.click()

            tablename = name_one + '-' + name_two

            print(tablename)

            pages = []

            # 跳页

            for l in range(50):

                currentPage = driver.page_source

                pages.append(currentPage)

                # 下一页

                s4 = driver.find_elements_by_class_name("lip")

                # 是否存在box直接跳页

                s5 = driver.find_elements_by_class_name("lip-input-box")

                time.sleep(1)

                if len(s5) == 0:

                    s4[-1].click()

                else:

                    s4[-2].click()

                nextPage = driver.page_source

                # 当前页和下一页一致跳出循环

                if nextPage == currentPage:

                    break

            pageData.append(pages)

        # 将html交给beautifulsoup,每个大类

        getPage(pageData,name_one,name_list)


 

    # 退出浏览器

    driver.close()

    driver.quit()

# name_one为表名,name_two为子表名

def getPage(pageData,name_one,name_list):

    datas = []

    for pages in pageData:

        data = []

        for page in pages:

            # 解析源代码

            soup = BeautifulSoup(page, 'html.parser')

            tbody = soup.find('tbody')

            # print(tbody)

            for item in tbody.children:

                if isinstance(item, bs4.element.Tag):

                    k = 0

                    tdItem = []

                    for td in item.children:

                        if isinstance(td, bs4.element.Tag):

                            if k == 0 or k == 1:

                                s = td.text.replace("\n","")

                                tdItem.append(s)

                            else:

                                ii = td.find('i')

                                if ii:

                                    tdItem.append('是')

                                else:

                                    tdItem.append('否')

                            k = k + 1

                    data.append(tdItem)

        print(data)

        datas.append(data)

    write_excel(datas,name_one,name_list)

def getMajor():

    url_1 = "https://yz.chsi.com.cn/zsml/pages/getMl.jsp"

    url_2 = "https://yz.chsi.com.cn/zsml/pages/getZy.jsp"

    headers = {

        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',

        'Connection': 'close'}  # CLOSE: 在header中不使用持久连接

    # 查询期刊名称及其他信息

    print(":------------开始爬取-----------")

    # response = requests.post(url, headers=headers, data=payload, cookies=cookie)

    response = requests.post(url_1, headers=headers)

    result = response.json()

    zyxw = {'mc':'专业学位','dm':'zyxw'}

    result.insert(0,zyxw)

    datas = []

    payload = {

        'mldm': '01'

    }

    for item in result:

        payload['mldm'] = item['dm']

        response = requests.post(url_2, headers=headers, data=payload)

        data = response.json()

        datas.append(data)

    return result,datas

def write_excel(datas,name_one,name_list):

    workbook = xlwt.Workbook(encoding='utf-8')

    k = 0

    print(datas)

    for item in name_list:

        name = item['mc']

        dm = item['dm']

        if name == '':

            name = dm

        # 写入为excel文件

        booksheet = workbook.add_sheet(name, cell_overwrite_ok=False)

        # 添加表头

        booksheet.write(0, 0, "招生单位")

        booksheet.write(0, 1, "所在地")

        booksheet.write(0, 2, "是否有研究生院")

        booksheet.write(0, 3, "是否是自划线院校")

        booksheet.write(0, 4, "是否有博士点")

        for i, row in enumerate(datas[k]):

            for j, col in enumerate(row):

                booksheet.write(i + 1, j, col)

        # 第k个数据

        k = k+1

    workbook.save('E:\\dataSet\\' + name_one + '.xls')

data_first,data_second = getMajor()

find_page(data_first,data_second)

```

#### 2、将所有数据写入同一个excel文件

```python

#!/opt/python39/bin/python3

# encoding=utf-8

import time

from selenium import webdriver

import xlwt

from bs4 import BeautifulSoup

import bs4

import requests

# 创建chrome参数对象

from selenium.webdriver.support.select import Select

def find_page(data_first,data_second):

    options = webdriver.ChromeOptions()

    # 解决DevToolsActivePort文件不存在的报错

    options.add_argument('--no-sandbox')

    # 指定浏览器分辨率

    options.add_argument('window-size=1600x900')

    # 谷歌文档提到需要加上这个属性来规避bug

    options.add_argument('--disable-gpu')

    # 隐藏滚动条, 应对一些特殊页面

    options.add_argument('--hide-scrollbars')

    # 不加载图片, 提升速度

    options.add_argument('blink-settings=imagesEnabled=false')

    # 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败

    options.add_argument('--headless')

    # 初始化一个driver,driver的路径选择的是相对路径,不行就写绝对路径

    # edge

    driver = webdriver.Edge()

    # chrome

    # driver = webdriver.Chrome()


 

    # 网页主页面请求路径

    url = "https://yz.chsi.com.cn/zsml/queryAction.do"

    driver.get(url)


 

    # 学科门类

    s1_len = len(data_first)

    print(s1_len)

    allData = []

    for i in range(s1_len+1):

        # 给出加载时间

        time.sleep(1)

        s1 = Select(driver.find_element_by_name("mldm"))

        if i == 0:

            continue

        s1.select_by_index(i)

        name_one = data_first[i-1]['mc']

        # 学科类别

        s2_len = len(data_second[i-1])

        print(s2_len)

        pageData = []

        name_list = data_second[i-1]

        for j in range(s2_len+1):

            s2 = Select(driver.find_element_by_name("yjxkdm"))

            if j == 0:

                continue

            s2.select_by_index(j)

            print(i,j)

            name_two = data_second[i-1][j-1]['mc']

            # 查询按钮

            s3 = driver.find_element_by_name("button")

            s3.click()

            tablename = name_one + '-' + name_two

            print(tablename)

            pages = []

            # 跳页

            for l in range(50):

                currentPage = driver.page_source

                pages.append(currentPage)

                # 下一页

                s4 = driver.find_elements_by_class_name("lip")

                # 是否存在box直接跳页

                s5 = driver.find_elements_by_class_name("lip-input-box")

                time.sleep(1)

                if len(s5) == 0:

                    s4[-1].click()

                else:

                    s4[-2].click()

                nextPage = driver.page_source

                # 当前页和下一页一致跳出循环

                if nextPage == currentPage:

                    break

            pageData.append(pages)

        allData.append(pageData)

        # 将html交给beautifulsoup,每个大类

    getPage(allData,data_first,data_second)


 

    # 退出浏览器

    driver.close()

    driver.quit()

# name_one为表名,name_two为子表名

def getPage(allData,data_first,data_second):

    all_data = []

    t = -1

    for pageData in allData:

        t = t + 1

        l = -1

        for pages in pageData:

            l = l + 1

            for page in pages:

                # 解析源代码

                soup = BeautifulSoup(page, 'html.parser')

                tbody = soup.find('tbody')

                # print(tbody)

                for item in tbody.children:

                    if isinstance(item, bs4.element.Tag):

                        k = 0

                        tdItem = []

                        tdItem.append(data_first[t]['mc'])

                        tdItem.append(data_second[t][l]['dm']+data_second[t][l]['mc'])

                        for td in item.children:

                            if isinstance(td, bs4.element.Tag):

                                if k == 0 or k == 1:

                                    s = td.text.replace("\n","")

                                    tdItem.append(s)

                                else:

                                    ii = td.find('i')

                                    if ii:

                                        tdItem.append('√')

                                    else:

                                        tdItem.append('×')

                                k = k + 1

                        all_data.append(tdItem)

    write_excel(all_data)

def getMajor():

    url_1 = "https://yz.chsi.com.cn/zsml/pages/getMl.jsp"

    url_2 = "https://yz.chsi.com.cn/zsml/pages/getZy.jsp"

    headers = {

        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36',

        'Connection': 'close'}  # CLOSE: 在header中不使用持久连接

    # 查询期刊名称及其他信息

    print("------------开始爬取-----------")

    # response = requests.post(url, headers=headers, data=payload, cookies=cookie)

    response = requests.post(url_1, headers=headers)

    result = response.json()

    zyxw = {'mc':'专业学位','dm':'zyxw'}

    result.insert(0,zyxw)

    datas = []

    payload = {

        'mldm': '01'

    }

    for item in result:

        payload['mldm'] = item['dm']

        response = requests.post(url_2, headers=headers, data=payload)

        data = response.json()

        datas.append(data)

    return result,datas

def write_excel(datas):

    workbook = xlwt.Workbook(encoding='utf-8')

    booksheet = workbook.add_sheet("学科门类", cell_overwrite_ok=False)

    # 添加表头

    booksheet.write(0, 0, "学科门类")

    booksheet.write(0, 1, "学科专业")

    booksheet.write(0, 2, "招生单位")

    booksheet.write(0, 3, "所在地")

    booksheet.write(0, 4, "是否有研究生院")

    booksheet.write(0, 5, "是否是自划线院校")

    booksheet.write(0, 6, "是否有博士点")

    for i, row in enumerate(datas):

        for j, col in enumerate(row):

            booksheet.write(i + 1, j, col)

    workbook.save('E:\\dataSet\\' + "数据" + '.xls')

data_first,data_second = getMajor()

print(data_first)

print(data_second)

find_page(data_first,data_second)

```

## 结果

![one.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i7ckihnjj30i90ecn2o.jpg)      

生成一个表的结果:      

![一个表结果.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i7dmvo11j311y0dttlc.jpg)

生成多个表的结果:  

![多个表的结果.png](https://tva1.sinaimg.cn/large/005T39qaly1h3i7eqng1cj311y0dt12t.jpg)文章来源地址https://www.toymoban.com/news/detail-842190.html

到了这里,关于selenium+beautifulsoup数据爬取的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python爬虫实现(requests、BeautifulSoup和selenium)

    Python requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。 下载requests库 pip install requests 实例: 属性和方法 属性或方法 说明 content 返回响应的内容,以字节为单位 headers 返回响应头,字典格式 json() 返回结果的 JSON 对象 request 返回请求此响应

    2024年02月07日
    浏览(30)
  • Python爬虫|使用Selenium轻松爬取网页数据

    1. 什么是selenium? Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作浏览器一样。支持的浏览器包括IE,Firefox,Safari,Chrome等。 Selenium可以驱动浏览器自动执行自定义好的逻辑代码,也就是可以通过代码完全模拟成人类使用

    2024年02月04日
    浏览(39)
  • Python爬虫实战:selenium爬取电商平台商品数据(1)

    def index_page(page): “”\\\" 抓取索引页 :param page: 页码 “”\\\" print(‘正在爬取第’, str(page), ‘页数据’) try: url = ‘https://search.jd.com/Search?keyword=iPhoneev=exbrand_Apple’ driver.get(url) if page 1: input = driver.find_element_by_xpath(‘//*[@id=“J_bottomPage”]/span[2]/input’) button = driver.find_element_by_xpath(‘

    2024年04月28日
    浏览(33)
  • Python爬虫入门:使用selenium库,webdriver库模拟浏览器爬虫,模拟用户爬虫,爬取网站内文章数据,循环爬取网站全部数据。

    *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。 目录 准备工具: 思路: 具体操作: 调用需要的库: 启动浏览器驱动: 代码主体:  完整代码(解析注释): Python环境; 安装selenium库; Python编辑器; 待爬取的网站; 安装好的浏览器; 与浏览器版本相对应的

    2023年04月24日
    浏览(33)
  • 一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium

    大家好,我是python222小锋老师。前段时间卷了一套  Python3零基础7天入门实战  以及1小时掌握Python操作Mysql数据库之pymysql模块技术 近日锋哥又卷了一波课程,python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium,文字版+视频版。1天掌握。 视频版教程:一天掌握python爬虫【

    2024年02月07日
    浏览(34)
  • 【Python爬虫】基于selenium库爬取京东商品数据——以“七夕”为例

    小白学爬虫,费了一番功夫终于成功了哈哈!本文将结合本人踩雷经历,分享给各位学友~ 用写入方式打开名为data的csv文件,并确定将要提取的五项数据。 上面第一行代码值得一提,driver =  webdriver.Edge()括号内为Edge浏览器驱动程序地址,需要在Edge浏览器设置中查找Edge浏览器

    2024年02月06日
    浏览(43)
  • Python网络爬虫逆向分析爬取动态网页、使用Selenium库爬取动态网页、​编辑将数据存储入MongoDB数据库

    目录 逆向分析爬取动态网页 了解静态网页和动态网页区别 1.判断静态网页  2.判断动态网页  逆向分析爬取动态网页 使用Selenium库爬取动态网页 安装Selenium库以及下载浏览器补丁 页面等待  页面操作 1.填充表单 2.执行JavaScript 元素选取 Selenium库的find_element的语法使用格式如下

    2024年02月15日
    浏览(77)
  • Python爬虫Selenium手动接管Edge爬取裁判文书网“环境污染”数据(Mac环境)

    目标数据:爬取从2007年到2022年,各地级市中级法院历年关于“环境污染”的裁判文书数量。 由于裁判文书网需要登录,Selenium手动接管爬取可避免频繁登录造成的封号风险。 Selenium如何手动接管Edge浏览器: 1、打开终端,将命令 /Applications/Microsoft Edge.app/Contents/MacOS/Microsof

    2023年04月09日
    浏览(30)
  • 爬虫框架有Scrapy、BeautifulSoup、Selenium

    爬虫框架有Scrapy、BeautifulSoup、Selenium BeautifulSoup比Scrapy相对容易学习。 Scrapy的扩展,支持和社区比BeautifulSoup更大。 Scrapy应被视为蜘蛛,而BeautifulSoup则是Parser。 1.爬虫基础知识 在开始Python爬虫之前,需要先掌握一些基础知识。首先了解一下HTTP协议,掌握常见的请求方法和状

    2024年02月07日
    浏览(29)
  • python爬虫实战 scrapy+selenium爬取动态网页

    最近学习了scrapy爬虫框架,想要找个目标练练手。由于现在很多网页都是动态的,因此还需要配合selenium爬取。本文旨在记录这次学习经历,如有疑问或不当之处,可以在评论区指出,一起学习。 对scrapy不了解的同学可以阅读这篇文章 爬虫框架 Scrapy 详解,对scrapy框架介绍的

    2024年02月07日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包