基于python爬虫技术对于淘宝的数据分析的设计与实现

本篇仅在于交流学习

本文主要介绍通过 selenium 模块和 requests 模块,同时让机器模拟人在浏览器上的行为,登录指定的网站,通过网站内部的搜索引擎来搜索自己相应的信息,从而获取相应关键字的商品信息,并进而获取数据,然后通过csv模块将数据存储到本地库中,接着在通过pandas、jieba、matplotlib 等模块进行分析,得出数据的特征。

本章对本系统设计的功能性需求和非功能性需求进行了详细的分析。把系统所需要的模块进行了整理和划分,明确了各个功能的需求。

设计任务:完成一个基于爬虫的网络页面和数据分析

(1)访问功能:使用爬虫进行页面访问。

(2)查询功能:运用程序在页面上进行自动关键字查询。

(3)爬取功能:对于页面上的信息进行过滤和针对化的爬取。

(4)存储功能:对于信息进行本地化的存储,将爬取数据保存至csv文件内。

(5)数据分析功能:对于本地化数据进行数据分析和数据展示。

构建HTTP伪装

这是针对 Selenium WebDriver 的 ChromeDriver 来设置的一组浏览器参数,以在爬取网站时提高程序稳定性和安全性。这些参数的主要作用如下:

1. '--disable-extensions':禁用 Chrome 扩展,避免插件对页面渲染产生影响。

2. '--disable-blink-features=AutomationControlled':禁用自动控制特性,避免被目标网站检测到使用了自动化爬虫。

3. '--no-sandbox':关闭 Chrome 浏览器的沙盘机制,提高程序的运行速度。

4. '--disable-dev-shm-usage':禁用 '/dev/shm' 临时文件系统,可避免程序因为内存不足而崩溃。

5. '--disable-gpu':禁用 GPU 硬件加速,减少程序资源占用。

6. '--start-maximized':开启浏览器最大化窗口模式,优化用户体验。

7. 'add_experimental_option('excludeSwitches', ['enable-automation'])':禁用自动化开关,并防止目标网站检测到 WebDriver 的使用情况。

8. 'add_experimental_option('useAutomationExtension', False)':禁用自动化扩展功能,避免被目标网站检测到使用了自动化爬虫。

9. '--user-agent':指定浏览器的 User-Agent,在请求目标网站时伪装成一个正常的浏览器访问,避免被目标网站检测到使用了自动化爬虫。

10.'chrome_options.add_argument("--proxy-server=http://{}".format(proxy_address))' 这行代码可以在使用Selenium自动化测试时配置代理服务器。具体来说,'chrome_options' 是chrome浏览器的选项对象,'add_argument()' 方法是向该选项对象中添加参数的方法。

其中, '--proxy-server' 是Chrome浏览器的一个参数,用来设置代理服务器地址。代理服务器地址一般包括 IP 地址和端口号,这里的 'proxy_address' 就是一个包含IP地址和端口号的变量。

使用格式化字符串 '"{}'".format(proxy_address)' 将代理服务器地址插入到参数字符串中,最终生成一个完整的代理服务器地址,然后将其作为参数传递给 'add_argument()' 方法。

这样,启动 Chrome 浏览器时,就会按照传入的代理服务器地址来进行网络请求,并通过该代理服务器获取网页内容。这在需要匿名爬取数据或测试一些需要使用代理的网站时非常有用。

这些设置是为了在爬取目标网站时提高程序稳定性、安全性和隐蔽性。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

headers = {

        'User-Agent''自己的请求头'

    }

    chrome_options = webdriver.ChromeOptions()

    # 设置ChromeDriver的options参数,以隐藏自动化控制

    chrome_options.add_argument('--disable-extensions')

    chrome_options.add_argument('--disable-blink-features=AutomationControlled')

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

    chrome_options.add_argument('--disable-dev-shm-usage')

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

    chrome_options.add_argument('--start-maximized')

    chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])

    chrome_options.add_experimental_option('useAutomationExtension'False)

    chrome_options.add_argument(f'user-agent={headers["User-Agent"]}')

    # 判断是否使用代理IP

    proxy_address = get_proxy()

    if proxy_address is not None:

        chrome_options.add_argument("--proxy-server=http://{}".format(proxy_address))  # 添加代理IP地址和端口号到ChromeOptions中

    # 创建ChromeDriver对象

    driver = webdriver.Chrome(options=chrome_options)

模拟登录

使用 Selenium WebDriver 实现淘宝网站登录的 Python 函数。其主要实现逻辑如下:

1. 跳转到淘宝登录页面:利用 WebDriver 打开淘宝网站登录页面。

2. 输入账号和密码:使用 'find_element_by_id' 方法找到对应的元素并输入对应的账号和密码。

3. 登录验证:等待用户输入验证码,并点击登录按钮进行验证。如果登录成功,则返回登录成功的浏览器实例,否则打印错误信息并关闭浏览器,返回 None。

该函数仅作为示例参考,在实际爬虫开发中需结合目标网站的特定情况进行调整和优化。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

def login_taobao(driver, username, password):

    # 跳转到淘宝登陆页面

    driver.get('https://login.taobao.com/member/login.jhtml')

    # 输入账号和密码

    username_input = driver.find_element_by_id('fm-login-id')

    password_input = driver.find_element_by_id('fm-login-password')

    username_input.click()

    username_input.send_keys(username)

    password_input.click()

    password_input.send_keys(password)

    time.sleep(10)

    # 登陆验证

    try:

        # 等待用户输入验证码

        time.sleep(20)

        # 点击登陆按钮

        actions = ActionChains(driver)

        actions.move_to_element(driver.find_element_by_class_name('fm-submit'))

        actions.click().perform()

        print('登录成功')

    except Exception as e:

        print('登录失败: ', e)

        driver.quit()

        return None

    time.sleep(3)

    return driver

信息爬取

使用 Selenium WebDriver 实现淘宝网站商品爬取的 Python 函数。主要实现逻辑如下:

1. 通过 'driver.get()' 方法打开淘宝网站搜索页,并使用通过让程序进行暂停操作逃逸反爬虫检测'time.sleep()' 方法等待网页数据加载完成。

2. 使用 'driver.find_elements_by_xpath()' 方法找到页面上所有需要爬取的商品元素,遍历每个元素,并使用 'find_element_by_xpath()' 方法定位元素中需要爬取的信息。

3. 将爬取到的数据存储为字典格式,并添加到 data 列表中。

4. 如果在遍历过程中出现异常情况,将错误信息打印到控制台。

5. 打印当前已完成的页面数。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

def crawl_taobao(driver, keyword, pages):

    data = []

    for in range(1, pages+1):   # 爬取相应页面的商品信息

        url = 'https://s.taobao.com/search?q={}&s={}'.format(keyword, (i-1)*44)

        driver.get(url)

        time.sleep(5)

        products = driver.find_elements_by_xpath('//div[@class="items"][1]/div[contains(@class, "item")]')

        for product in products:

            try:

                # 爬取商品名称、价格、地点、店铺和销量等信息

                title = product.find_element_by_xpath(".//div[@class='row row-2 title']/a")

                price = product.find_element_by_xpath('.//div[@class="price g_price g_price-highlight"]/strong')

                location = product.find_element_by_xpath('.//div[@class="location"]')

                shop = product.find_element_by_xpath('.//div[@class="shop"]/a/span[2]')

                sales = product.find_element_by_xpath('.//div[@class="deal-cnt"]')

                data.append({ 'Title': title.text.strip(),

                             'Price'float(price.text.strip()),

                             'Location': location.text.strip().replace(' ', ''),

                             'Shop': shop.text.strip(),

                             'Sales': sales.text.strip()})

            except Exception as e:

                print('Error:', e)

        print('已完成第{}页'.format(i))

    # 将数据存储为CSV文件

    df = pd.DataFrame(data)

    with open(keyword + '.csv''w', encoding&#

  • 8
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值