记录一次简单的爬虫学习

以下是一个简单的的爬虫代码,以及简单封装的步骤,本文旨在学习,无其他因素。

import asyncio
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import pandas as pd
import time
import random
import os
import json
from requests_html import HTMLSession
from pyppeteer import launch

读取代理IP配置文件

with open('proxies.json') as f:
    proxies = json.load(f)

用户登录信息(此处仅为示例,实际应从安全的地方获取)

login_info = {
    'jd': {
        'username': 'your_jd_username',
        'password': 'your_jd_password',
    },
    'taobao': {
        'username': 'your_taobao_username',
        'password': 'your_taobao_password',
    },
}

随机延迟函数

def random_delay(min_delay, max_delay):
    time.sleep(random.uniform(min_delay, max_delay))

使用session管理cookies

session = HTMLSession()

设置代理IP

def set_proxy(proxy):
    session.proxies.update({'http': proxy, 'https': proxy})

模拟登录方法(此处仅为示例,实际需根据登录页面结构实现)

async def login(platform, login_page_url, credentials):
    browser = await launch(headless=True)
    page = await browser.newPage()
    await page.goto(login_page_url)
填写用户名和密码,处理验证码(此处为占位符,实际需要实现)
# ...
 await page.click('#submit_button')  # 提交登录按钮的ID

等待登陆成功页面出现

  await page.waitForNavigation()
    cookies = await page.cookies()
    await browser.close()

将cookies添加到session

for cookie in cookies:
session.cookies.set(cookie['name'],cookie['value'], domain=cookie['domain'])

抓取商品价格函数(此处仅为示例,实际需根据商品详情页结构实现)

async def crawl_product(platform, product_url):
    random_delay(1, 3)
    set_proxy(random.choice(proxies))
    response = session.get(product_url)
    response.html.render(sleep=2)  # 使用render以处理JS渲染的内容
    soup = BeautifulSoup(response.html.html, 'lxml')
    price_element = soup.select_one('#product_price')  # 请替换为实际价格元素的选择器
    price = price_element.text.strip() if price_element else 'N/A'
    return {'platform': platform, 'price': price}

主程序入口

async def main():
    products_urls = [
        ('jd', 'https://item.jd.com/某商品ID.html'),
        ('taobao', 'https://item.taobao.com/某商品ID.htm'),
    ]
    for platform, url in products_urls:
        await login(platform, get_login_url(platform), login_info[platform])
        product_data = await crawl_product(platform, url)
        print(product_data)
执行主程序
asyncio.run(main())

​将抓取的数据存入DataFrame并导出到Excel(此处在主程序完成后进行)

data = [...]  # 存储抓取到的所有产品数据
df = pd.DataFrame(data)
df.to_excel('products_prices.xlsx', index=False)

为了将以上代码编译成一个可执行的程序软件,可以将其封装在一个Python脚本中,并使用像pyinstaller这样的工具将Python脚本打包成独立可执行文件。首先,确保你的Python环境中已安装所有所需的库,包括requests, beautifulsoup4, pandas, fake-useragent, requests-html, pyppeteer等。

以下是将代码组织成一个Python脚本并使用pyinstaller打包的过程:

  1. 将上述代码保存到一个名为crawler.py的文件中。
  2. 安装pyinstaller:
  pip install pyinstaller
  1. 根据实际情况调整代码中的登录信息、URL和其他配置项。
  2. 在命令行中使用pyinstaller打包程序:
  pyinstaller --onefile crawler.py

这将会在dist目录下生成一个可执行文件(例如:crawler.exe for Windows或crawler for Linux/macOS)。
5. 运行生成的可执行文件即可执行爬虫程序。
需要注意的是,如果你计划将这个爬虫做成桌面应用程序,需要处理的问题可能还包括图形用户界面(GUI)、日志记录、错误处理、跨平台兼容性等。
另外,京东、淘宝等电商网站强烈反对未经授权的爬取行为,并采取了各种反爬措施,所以最好还是寻找官方API或者其他合法途径获取数据。同时,请务必遵守相关法律法规,尊重网站的隐私政策与条款。

  • 16
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值