157 lines
6.0 KiB
Plaintext
157 lines
6.0 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 16,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"1787\n",
|
|
"数据已成功导出到car_data.xlsx\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"import requests\n",
|
|
"from bs4 import BeautifulSoup\n",
|
|
"import pandas as pd\n",
|
|
"\n",
|
|
"pageSize = 10000\n",
|
|
"url = 'https://s19.kehu51.com/app/Customers/CusTools.aspx?action=GetGridData'\n",
|
|
"\n",
|
|
"json = f'showID=3&viewName=mycus&gridName=cuslistnew2&configGuid=&whereSql=E513575924A85785&sortName=lastfollowtime&sortMode=desc&pageSize={pageSize}&pageIndex=1&recordCount=1787&isComb=false&combName=&combIntTemp=_comb&completeSql=E513575924A85785&customParam=%7B%22field%22%3A%22selectUserID%22%2C%22key%22%3A0%7D'\n",
|
|
"# 构建请求头\n",
|
|
"headers = {\n",
|
|
" 'Accept': '*/*',\n",
|
|
" 'Accept-Encoding': 'gzip, deflate, br, zstd',\n",
|
|
" 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n",
|
|
" 'Content-Length': '299',\n",
|
|
" 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n",
|
|
" 'Cookie': 'kehu51_user=18735521522; kehu51_pass=Xx123456; kehu51_server_username=cc9c4b66f19ec7ae6d489e6caaaceb0d; kehu51_server_serverid=19; ASP.NET_SessionId=lvhtxdfjbuymrsryoczhn5mi; teamCreateManID=0jkmaY3RdeFj2HX4WrJN5Q==; kehu51cookie=6958BDD7DCEADF0A83775994EFD09E5D722AF537BFB0741BB8E35CE4807E32F48097A08E3C914A52730C3D4B09AF6C9524BAA937C4EF2AF773D396081027AE7EA29932D831A19FA4D145E78564F9A85D63C305EE0B8DD39B2178B00340B34D3BEF70D88C8EF4FE02BC0EF6601A6B1F0FB762CBDAE71DDE08C27E62F90CCF7E155E41C9983E3327F67C170BF17387753B3B26C7D353085F23A2111D62896C9EE93174D53C5EB23DF8569C5FF49E615D498D62CEAA6DB5C73176112ACEA5DB5501C1A1B71C0B470239831165C0EB939B753AB79B0323E9AA06',\n",
|
|
" 'Origin': 'https://s19.kehu51.com',\n",
|
|
" 'Priority': 'u=1, i',\n",
|
|
" 'Referer': 'https://s19.kehu51.com/App/customers/cuslist.aspx?viewname=mycus&templateid=',\n",
|
|
" 'Sec-Ch-Ua': '\"Chromium\";v=\"130\", \"Microsoft Edge\";v=\"130\", \"Not?A_Brand\";v=\"99\"',\n",
|
|
" 'Sec-Ch-Ua-Mobile': '?0',\n",
|
|
" 'Sec-Ch-Ua-Platform': '\"Windows\"',\n",
|
|
" 'Sec-Fetch-Dest': 'empty',\n",
|
|
" 'Sec-Fetch-Mode': 'cors',\n",
|
|
" 'Sec-Fetch-Site': 'same-origin',\n",
|
|
" 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0',\n",
|
|
" 'X-Requested-With': 'XMLHttpRequest'\n",
|
|
"}\n",
|
|
"\n",
|
|
"res = requests.post(url=url,data = json,headers=headers)\n",
|
|
"\n",
|
|
"data = res.json()\n",
|
|
"\n",
|
|
"gridHtml = data['gridHtml']\n",
|
|
"\n",
|
|
"soup = BeautifulSoup(gridHtml, 'lxml') # 使用lxml解析器\n",
|
|
"\n",
|
|
"tbody = soup.find_all('tbody')[0]\n",
|
|
"\n",
|
|
"data = []\n",
|
|
"\n",
|
|
"# 查找所有的行\n",
|
|
"rows = tbody.find_all('tr', class_='TableLine1 k5-grid-tr')\n",
|
|
"print(len(rows))\n",
|
|
"for row in rows:\n",
|
|
" td_tags=row.find_all('td')\n",
|
|
" # 客户名称(车牌)\n",
|
|
" customer_name = row.find('a', class_='A0').text.strip()\n",
|
|
" # 手机号\n",
|
|
" phone_number = row.find('a', class_='phonemenu-trigger')\n",
|
|
" if phone_number:\n",
|
|
" phone_number = phone_number.text.strip()\n",
|
|
" else:\n",
|
|
" phone_number = ''\n",
|
|
" # 机油\n",
|
|
" oil = row.find('a', href=lambda x: x and 'OpneQQDialog' in x)\n",
|
|
" if oil:\n",
|
|
" oil = oil.text.strip()\n",
|
|
" else:\n",
|
|
" oil = ''\n",
|
|
" # 车型\n",
|
|
" car_models =td_tags[5].get_text()\n",
|
|
" if car_models:\n",
|
|
" pass\n",
|
|
" else:\n",
|
|
" car_models=''\n",
|
|
" # 公里数\n",
|
|
" mileage = row.find('a', href=lambda x: x and 'OpenWangWang' in x)\n",
|
|
" if mileage:\n",
|
|
" mileage = mileage.text.strip()\n",
|
|
" else:\n",
|
|
" mileage = ''\n",
|
|
" # 其他联系方式\n",
|
|
" \n",
|
|
" other_contact = td_tags[7].get_text()\n",
|
|
" if other_contact:\n",
|
|
" pass\n",
|
|
" else:\n",
|
|
" other_contact = ''\n",
|
|
" # 日期\n",
|
|
" date = row.find('td', id=lambda x: x and x.startswith('Customize1_'))\n",
|
|
" if date:\n",
|
|
" date = date.text.strip()\n",
|
|
" else:\n",
|
|
" date = ''\n",
|
|
" # 价格\n",
|
|
" price = row.find('td', id=lambda x: x and x.startswith('Customize2_'))\n",
|
|
" if price:\n",
|
|
" price=price.text.strip()\n",
|
|
" else:\n",
|
|
" price=''\n",
|
|
" # 备注\n",
|
|
" remarks = row.find('td', id=lambda x: x and x.startswith('Customize3_'))\n",
|
|
" if remarks:\n",
|
|
" remarks=remarks.text.strip()\n",
|
|
" else:\n",
|
|
" remarks=''\n",
|
|
" # 姓名\n",
|
|
" name = row.find('td', id=lambda x: x and x.startswith('Customize4_'))\n",
|
|
" if name:\n",
|
|
" name = name.text.strip()\n",
|
|
" else:\n",
|
|
" name = ''\n",
|
|
"\n",
|
|
" # 将数据添加到列表中\n",
|
|
" data.append([customer_name, phone_number, oil,car_models, mileage, other_contact, date, price, remarks, name])\n",
|
|
"\n",
|
|
"# 创建DataFrame\n",
|
|
"df = pd.DataFrame(data, columns=['客户名称(车牌)', '手机号', '机油','车型', '公里数', '其他联系方式', '日期', '价格', '备注', '姓名'])\n",
|
|
"\n",
|
|
"# 导出到Excel\n",
|
|
"df.to_excel('car_data.xlsx', index=False)\n",
|
|
"\n",
|
|
"print(\"数据已成功导出到car_data.xlsx\")\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "base",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.12.4"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|