以下是一个简单的的爬虫代码,以及简单封装的步骤,本文旨在学习,无其他因素。
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
打包的过程:
- 将上述代码保存到一个名为
crawler.py
的文件中。 - 安装pyinstaller:
pip install pyinstaller
- 根据实际情况调整代码中的登录信息、URL和其他配置项。
- 在命令行中使用
pyinstaller
打包程序:
pyinstaller --onefile crawler.py
这将会在dist目录下生成一个可执行文件(例如:crawler.exe
for Windows或crawler
for Linux/macOS)。
5. 运行生成的可执行文件即可执行爬虫程序。
需要注意的是,如果你计划将这个爬虫做成桌面应用程序,需要处理的问题可能还包括图形用户界面(GUI)、日志记录、错误处理、跨平台兼容性等。
另外,京东、淘宝等电商网站强烈反对未经授权的爬取行为,并采取了各种反爬措施,所以最好还是寻找官方API或者其他合法途径获取数据。同时,请务必遵守相关法律法规,尊重网站的隐私政策与条款。