挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)不懂社区·好资源不错过·各位资源站大佬欢迎来采集搬运寻找会做《单机》游戏修改器的开发作者长期合作,价格不是问题!联系QQ:1874088565
IOS签名/udid证书出售/送证书加群1040456405 ██【我要租此广告位】██.
.. .
查看: 1738|回复: 0
打印 上一主题 下一主题

[求] 第一天学习selenium,尝试了下爬取某宝数据

[复制链接]

10

积分

24

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
-14
海币
119
交易币
0
跳转到指定楼层
楼主
发表于 2020-12-3 13:41:15 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


[AppleScript] 纯文本查看 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import re
from pyquery import PyQuery as pq
import pandas as pd
from selenium.webdriver.chrome.options import Options
from time import sleep

chrome_options = Options()
chrome_options.add_argument('--headless')

browser = webdriver.Chrome()
wait = WebDriverWait(browser, 10)
data = pd.DataFrame()

browser.set_window_size(1400, 900)

def search():
    print('正在搜索')
    try:
        browser.get('https://www.taobao.com')
        input = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '#q'))
        )
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#J_TSearchForm > div.search-button > button')))
        input.send_keys('美食')  # 这里输入你要搜索的关键字
        submit.click()
        zh()
        infor()
        total = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.total'))
        )
        return total.text
    except TimeoutException:
        search()

def zh():
    print('正在登录')  # 因为我的账号还是ip好像被检测到了有爬虫嫌疑,所以每次搜索会跳转到登录页面。没被检测过的,搜索是不用登录的
    try:
        input_zh = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '#fm-login-id'))
        )
        input_key_words = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '#fm-login-password'))
        )
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#login-form > div.fm-btn > button')))
        input_zh.send_keys('xxxx')  # 这里xxx为输入的账号
        input_key_words.send_keys('xxxx')  # 这里xxxx为输入的账号密码
        submit.click()
    except TimeoutException:
        zh()

def next_page(page_num):
    print('正在翻页,目前到第{}页'.format(page_num))
    sleep(5)  # 因为防止淘宝反爬,所以设置5秒翻页一次
    try:
        input_page_num = wait.until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input'))
        )
        submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))
        input_page_num.clear()
        input_page_num.send_keys(page_num)
        submit.click()
        wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page_num)))
        infor()
    except TimeoutException:
        next_page(page_num)

def infor():
    wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))
    html = browser.page_source
    doc = pq(html)
    items = doc('#mainsrp-itemlist .items .item').items()
    for item in items:
        try:
            img = item.find('.pic .img').attr('src')  # 图片
        except:
            img = '无'
        try:
            price = item.find('.price').text()  # 价格
        except:
            price = '无'
        try:
            deal = item.find('.deal-cnt').text()[:-3]  # 出售数量
        except:
            deal = '无'
        try:
            goods = item.find('.title').text()  # 商品名字
        except:
            goods = '无'
        try:
            shop = item.find('.shop').text()  # 店铺名字
        except:
            shop = '无'
        try:
            location = item.find('.location').text()  # 地区
        except:
            location = '无'
        information = {
            "img": img,
            "price": price,
            "deal": deal,
            "goods": goods,
            "shop": shop,
            "location": location
        }
        global data
        if data.empty:
            data = pd.DataFrame(information, index=[0])
        else:
            data = data.append(information, ignore_index=True)

def main():
    browser.get("http://httpbin.org/ip")
    print(browser.page_source)
    total = search()
    total = int(re.compile('(\d+)').search(total).group(1))
    for i in range(2, total):  # total就是爬取的页数,这里我是自动获取了最大页数,也可以自己设置
        next_page(i)
    data.to_csv(r'D:\python work\taobao_spider\infor\meishi1.csv', encoding='utf-8')  # 保存的路径修改成自己的
    browser.close()
    print("爬虫完成")

if __name__ == '__main__':
    main()


联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇:收一份塔科夫的静默自瞄
下一篇:王者、吃鸡、文明重启
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2025-4-9 05:22 , Processed in 0.078808 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

快速回复 返回顶部 返回列表