admin 管理员组

文章数量: 887017

  • 个人数据丰富:本项目将尽可能多地为你爬取个人数据,后期数据处理可根据需要删减。

  • 数据分析:本项目提供个人数据的可视化分析,目前仅部分支持。

InfoSpider使用起来也非常简单,你只需要安装python3和Chrome浏览器,运行 python3 main.py,在打开的窗口点击数据源按钮, 根据提示选择数据保存路径,接着输入账号密码,就会自动爬取数据,根据下载的目录就可以查看爬下来的数据。

当然如果你想自己去练习和学习爬虫,作者也开源了所有的爬取代码,非常适合实战。

举个例子,比如爬取taobao的:

import json

import random

import time

import sys

import os

import requests

import numpy as np

import math

from lxml import etree

from pyquery import PyQuery as pq

from selenium import webdriver

from selenium.webdriver import ChromeOptions

from selenium.webdrivermon.by import By

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver import ChromeOptions, ActionChains

from tkinter.filedialog import askdirectory

from tqdm import trange

def ease_out_quad(x):

return 1 - (1 - x) * (1 - x)

def ease_out_quart(x):

return 1 - pow(1 - x, 4)

def ease_out_expo(x):

if x == 1:

return 1

else:

return 1 - pow(2, -10 * x)

def get_tracks(distance, seconds, ease_func):

tracks = [0]

offsets = [0]

for t in np.arange(0.0, seconds, 0.1):

ease = globals()[ease_func]

offset = round(ease(t / seconds) * distance)

tracks.append(offset - offsets[-1])

offsets.append(offset)

return offsets, tracks

def drag_and_drop(browser, offset=26.5):

knob = browser.find_element_by_id(‘nc_1_n1z’)

offsets, tracks = get_tracks(offset, 12, ‘ease_out_expo’)

ActionChains(browser).click_and_hold(knob).perform()

for x in tracks:

ActionChains(browser).move_by_offset(x, 0).perform()

ActionChains(browser).pause(0.5).release().perform()

def gen_session(cookie):

session = requests.session()

cookie_dict = {}

list = cookie.split(‘;’)

for i in list:

try:

cookie_dict[i.split(‘=’)[0]] = i.split(‘=’)[1]

except IndexError:

cookie_dict[‘’] = i

requests.utils.add_dict_to_cookiejar(session.cookies, cookie_dict)

return session

class TaobaoSpider(object):

def init(self, cookies_list):

self.path = askdirectory(title=‘选择信息保存文件夹’)

if str(self.path) == “”:

sys.exit(1)

self.headers = {

‘User-Agent’: ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36’,

}

option = ChromeOptions()

option.add_experimental_option(‘excludeSwitches’, [‘enable-automation’])

option.add_experimental_option(“prefs”, {“profile.managed_default_content_settings.images”: 2})  # 不加载图片,加快访问速度

option.add_argument(‘–headless’)

self.driver = webdriver.Chrome(options=option)

self.driver.get(‘https://i.taobao/my_taobao.htm’)

for i in cookies_list:

self.driver.add_cookie(cookie_dict=i)

self.driver.get(‘https://i.taobao/my_taobao.htm’)

self.wait = WebDriverWait(self.driver, 20)  # 超时时长为10s

# 模拟向下滑动浏览

def swipe_down(self, second):

for i in range(int(second / 0.1)):

# 根据i的值,模拟上下滑动

if (i % 2 == 0):

js = “var q=document.documentElement.scrollTop=” + str(300 + 400 * i)

else:

js = “var q=document.documentElement.scrollTop=” + str(200 * i)

self.driver.execute_script(js)

time.sleep(0.1)

js = “var q=document.documentElement.scrollTop=100000”

self.driver.execute_script(js)

time.sleep(0.1)

# 爬取淘宝 我已买到的宝贝商品数据, pn 定义爬取多少页数据

def crawl_good_buy_data(self, pn=3):

# 对我已买到的宝贝商品数据进行爬虫

self.driver.get(“https://buyertrade.taobao/trade/itemlist/list_bought_items.htm”)

# 遍历所有页数

for page in trange(1, pn):

data_list = []

# 等待该页面全部已买到的宝贝商品数据加载完毕

good_total = self.wait.until(

EC.presence_of_element_located((By.CSS_SELECTOR, ‘#tp-bought-root > div.js-order-container’)))

# 获取本页面源代码

html = self.driver.page_source

# pq模块解析网页源代码

doc = pq(html)

# # 存储该页已经买到的宝贝数据

good_items = doc(‘#tp-bought-root .js-order-container’).items()

# 遍历该页的所有宝贝

for item in good_items:

# 商品购买时间、订单号

good_time_and_id = item.find(‘.bought-wrapper-mod__head-info-cell___29cDO’).text().replace(‘\n’, “”).replace(‘\r’, “”)

# 商家名称

# good_merchant = item.find(‘.seller-mod__container___1w0Cx’).text().replace(‘\n’, “”).replace(‘\r’, “”)

good_merchant = item.find(‘.bought-wrapper-mod__seller-container___3dAK3’).text().replace(‘\n’, “”).replace(‘\r’, “”)

# 商品名称

# good_name = item.find(‘.sol-mod__no-br___1PwLO’).text().replace(‘\n’, “”).replace(‘\r’, “”)

good_name = item.find(‘.sol-mod__no-br___3Ev-2’).text().replace(‘\n’, “”).replace(‘\r’, “”)

# 商品价格

good_price = item.find(‘.price-mod__price___cYafX’).text().replace(‘\n’, “”).replace(‘\r’, “”)

# 只列出商品购买时间、订单号、商家名称、商品名称

# 其余的请自己实践获取

data_list.append(good_time_and_id)

data_list.append(good_merchant)

data_list.append(good_name)

data_list.append(good_price)

#print(good_time_and_id, good_merchant, good_name)

#file_path = os.path.join(os.path.dirname(file) + ‘/user_orders.json’)

# file_path = “…/Spiders/taobao/user_orders.json”

json_str = json.dumps(data_list)

with open(self.path + os.sep + ‘user_orders.json’, ‘a’) as f:

f.write(json_str)

# print(‘\n\n’)

# 大部分人被检测为机器人就是因为进一步模拟人工操作

# 模拟人工向下浏览商品,即进行模拟下滑操作,防止被识别出是机器人

# 随机滑动延时时间

swipe_time = random.randint(1, 3)

self.swipe_down(swipe_time)

# 等待下一页按钮 出现

good_total = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ‘.pagination-next’)))

good_total.click()

time.sleep(2)

# while 1:

#     time.sleep(0.2)

#     try:

#         good_total = self.driver.find_element_by_xpath(‘//li[@title=“下一页”]’)

#         break

#     except:

#         continue

# # 点击下一页按钮

# while 1:

#     time.sleep(2)

#     try:

#         good_total.click()

#         break

#     except Exception:

#         pass

# 收藏宝贝 传入爬几页 默认三页  https://shoucang.taobao/nodejs/item_collect_chunk.htm?ifAllTag=0&tab=0&tagId=&categoryCount=0&type=0&tagName=&categoryName=&needNav=false&startRow=60

def get_choucang_item(self, page=3):

url = ‘https://shoucang.taobao/nodejs/item_collect_chunk.htm?ifAllTag=0&tab=0&tagId=&categoryCount=0&type=0&tagName=&categoryName=&needNav=false&startRow={}’

pn = 0

json_list = []

for i in trange(page):

self.driver.get(url.format(pn))

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

本文标签: 爬虫 工具箱 开源 最新 python